From 1c0fa198245eb27554b85b82e1b4fa43c7f18a3e Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Tue, 31 Jul 2018 12:25:00 +0200 Subject: [PATCH] 3D scene toolbar uses a single texture --- resources/icons/add_disabled_36.png | Bin 831 -> 0 bytes resources/icons/add_hover_36.png | Bin 956 -> 0 bytes resources/icons/add_hover_pressed_36.png | Bin 953 -> 0 bytes resources/icons/add_normal_36.png | Bin 934 -> 0 bytes resources/icons/add_pressed_36.png | Bin 929 -> 0 bytes resources/icons/arrow_out_disabled_36.png | Bin 723 -> 0 bytes resources/icons/arrow_out_hover_36.png | Bin 826 -> 0 bytes .../icons/arrow_out_hover_pressed_36.png | Bin 824 -> 0 bytes resources/icons/arrow_out_normal_36.png | Bin 804 -> 0 bytes resources/icons/arrow_out_pressed_36.png | Bin 800 -> 0 bytes ...arrow_rotate_anticlockwise_disabled_36.png | Bin 691 -> 0 bytes .../arrow_rotate_anticlockwise_hover_36.png | Bin 799 -> 0 bytes ..._rotate_anticlockwise_hover_pressed_36.png | Bin 795 -> 0 bytes .../arrow_rotate_anticlockwise_normal_36.png | Bin 780 -> 0 bytes .../arrow_rotate_anticlockwise_pressed_36.png | Bin 777 -> 0 bytes .../arrow_rotate_clockwise_disabled_36.png | Bin 709 -> 0 bytes .../icons/arrow_rotate_clockwise_hover_36.png | Bin 796 -> 0 bytes ...rrow_rotate_clockwise_hover_pressed_36.png | Bin 791 -> 0 bytes .../arrow_rotate_clockwise_normal_36.png | Bin 773 -> 0 bytes .../arrow_rotate_clockwise_pressed_36.png | Bin 770 -> 0 bytes resources/icons/brick_add_disabled_36.png | Bin 947 -> 0 bytes resources/icons/brick_add_hover_36.png | Bin 1024 -> 0 bytes .../icons/brick_add_hover_pressed_36.png | Bin 1019 -> 0 bytes resources/icons/brick_add_normal_36.png | Bin 1004 -> 0 bytes resources/icons/brick_add_pressed_36.png | Bin 999 -> 0 bytes resources/icons/brick_delete_disabled_36.png | Bin 953 -> 0 bytes resources/icons/brick_delete_hover_36.png | Bin 1022 -> 0 bytes .../icons/brick_delete_hover_pressed_36.png | Bin 1018 -> 0 bytes resources/icons/brick_delete_normal_36.png | Bin 1002 -> 0 bytes resources/icons/brick_delete_pressed_36.png | Bin 1000 -> 0 bytes resources/icons/bricks_disabled_36.png | Bin 880 -> 0 bytes resources/icons/bricks_hover_36.png | Bin 1013 -> 0 bytes resources/icons/bricks_hover_pressed_36.png | Bin 1006 -> 0 bytes resources/icons/bricks_normal_36.png | Bin 998 -> 0 bytes resources/icons/bricks_pressed_36.png | Bin 990 -> 0 bytes resources/icons/cog_disabled_36.png | Bin 942 -> 0 bytes resources/icons/cog_hover_36.png | Bin 1007 -> 0 bytes resources/icons/cog_hover_pressed_36.png | Bin 1005 -> 0 bytes resources/icons/cog_normal_36.png | Bin 984 -> 0 bytes resources/icons/cog_pressed_36.png | Bin 981 -> 0 bytes resources/icons/cross_disabled_36.png | Bin 800 -> 0 bytes resources/icons/cross_hover_36.png | Bin 875 -> 0 bytes resources/icons/cross_hover_pressed_36.png | Bin 875 -> 0 bytes resources/icons/cross_normal_36.png | Bin 845 -> 0 bytes resources/icons/cross_pressed_36.png | Bin 843 -> 0 bytes resources/icons/delete_disabled_36.png | Bin 839 -> 0 bytes resources/icons/delete_hover_36.png | Bin 913 -> 0 bytes resources/icons/delete_hover_pressed_36.png | Bin 911 -> 0 bytes resources/icons/delete_normal_36.png | Bin 895 -> 0 bytes resources/icons/delete_pressed_36.png | Bin 893 -> 0 bytes resources/icons/package_disabled_36.png | Bin 935 -> 0 bytes resources/icons/package_hover_36.png | Bin 1038 -> 0 bytes resources/icons/package_hover_pressed_36.png | Bin 1034 -> 0 bytes resources/icons/package_normal_36.png | Bin 1021 -> 0 bytes resources/icons/package_pressed_36.png | Bin 1015 -> 0 bytes resources/icons/shape_ungroup_disabled_36.png | Bin 770 -> 0 bytes resources/icons/shape_ungroup_hover_36.png | Bin 873 -> 0 bytes .../icons/shape_ungroup_hover_pressed_36.png | Bin 866 -> 0 bytes resources/icons/shape_ungroup_normal_36.png | Bin 841 -> 0 bytes resources/icons/shape_ungroup_pressed_36.png | Bin 836 -> 0 bytes resources/icons/toolbar.png | Bin 0 -> 25416 bytes .../variable_layer_height_disabled_36.png | Bin 450 -> 0 bytes .../icons/variable_layer_height_hover_36.png | Bin 473 -> 0 bytes ...variable_layer_height_hover_pressed_36.png | Bin 471 -> 0 bytes .../icons/variable_layer_height_normal_36.png | Bin 443 -> 0 bytes .../variable_layer_height_pressed_36.png | Bin 446 -> 0 bytes xs/src/slic3r/GUI/GLCanvas3D.cpp | 128 ++-- xs/src/slic3r/GUI/GLCanvas3D.hpp | 4 + xs/src/slic3r/GUI/GLTexture.cpp | 41 +- xs/src/slic3r/GUI/GLTexture.hpp | 22 + xs/src/slic3r/GUI/GLToolbar.cpp | 650 +++++++++++++----- xs/src/slic3r/GUI/GLToolbar.hpp | 116 +++- 72 files changed, 690 insertions(+), 271 deletions(-) delete mode 100644 resources/icons/add_disabled_36.png delete mode 100644 resources/icons/add_hover_36.png delete mode 100644 resources/icons/add_hover_pressed_36.png delete mode 100644 resources/icons/add_normal_36.png delete mode 100644 resources/icons/add_pressed_36.png delete mode 100644 resources/icons/arrow_out_disabled_36.png delete mode 100644 resources/icons/arrow_out_hover_36.png delete mode 100644 resources/icons/arrow_out_hover_pressed_36.png delete mode 100644 resources/icons/arrow_out_normal_36.png delete mode 100644 resources/icons/arrow_out_pressed_36.png delete mode 100644 resources/icons/arrow_rotate_anticlockwise_disabled_36.png delete mode 100644 resources/icons/arrow_rotate_anticlockwise_hover_36.png delete mode 100644 resources/icons/arrow_rotate_anticlockwise_hover_pressed_36.png delete mode 100644 resources/icons/arrow_rotate_anticlockwise_normal_36.png delete mode 100644 resources/icons/arrow_rotate_anticlockwise_pressed_36.png delete mode 100644 resources/icons/arrow_rotate_clockwise_disabled_36.png delete mode 100644 resources/icons/arrow_rotate_clockwise_hover_36.png delete mode 100644 resources/icons/arrow_rotate_clockwise_hover_pressed_36.png delete mode 100644 resources/icons/arrow_rotate_clockwise_normal_36.png delete mode 100644 resources/icons/arrow_rotate_clockwise_pressed_36.png delete mode 100644 resources/icons/brick_add_disabled_36.png delete mode 100644 resources/icons/brick_add_hover_36.png delete mode 100644 resources/icons/brick_add_hover_pressed_36.png delete mode 100644 resources/icons/brick_add_normal_36.png delete mode 100644 resources/icons/brick_add_pressed_36.png delete mode 100644 resources/icons/brick_delete_disabled_36.png delete mode 100644 resources/icons/brick_delete_hover_36.png delete mode 100644 resources/icons/brick_delete_hover_pressed_36.png delete mode 100644 resources/icons/brick_delete_normal_36.png delete mode 100644 resources/icons/brick_delete_pressed_36.png delete mode 100644 resources/icons/bricks_disabled_36.png delete mode 100644 resources/icons/bricks_hover_36.png delete mode 100644 resources/icons/bricks_hover_pressed_36.png delete mode 100644 resources/icons/bricks_normal_36.png delete mode 100644 resources/icons/bricks_pressed_36.png delete mode 100644 resources/icons/cog_disabled_36.png delete mode 100644 resources/icons/cog_hover_36.png delete mode 100644 resources/icons/cog_hover_pressed_36.png delete mode 100644 resources/icons/cog_normal_36.png delete mode 100644 resources/icons/cog_pressed_36.png delete mode 100644 resources/icons/cross_disabled_36.png delete mode 100644 resources/icons/cross_hover_36.png delete mode 100644 resources/icons/cross_hover_pressed_36.png delete mode 100644 resources/icons/cross_normal_36.png delete mode 100644 resources/icons/cross_pressed_36.png delete mode 100644 resources/icons/delete_disabled_36.png delete mode 100644 resources/icons/delete_hover_36.png delete mode 100644 resources/icons/delete_hover_pressed_36.png delete mode 100644 resources/icons/delete_normal_36.png delete mode 100644 resources/icons/delete_pressed_36.png delete mode 100644 resources/icons/package_disabled_36.png delete mode 100644 resources/icons/package_hover_36.png delete mode 100644 resources/icons/package_hover_pressed_36.png delete mode 100644 resources/icons/package_normal_36.png delete mode 100644 resources/icons/package_pressed_36.png delete mode 100644 resources/icons/shape_ungroup_disabled_36.png delete mode 100644 resources/icons/shape_ungroup_hover_36.png delete mode 100644 resources/icons/shape_ungroup_hover_pressed_36.png delete mode 100644 resources/icons/shape_ungroup_normal_36.png delete mode 100644 resources/icons/shape_ungroup_pressed_36.png create mode 100644 resources/icons/toolbar.png delete mode 100644 resources/icons/variable_layer_height_disabled_36.png delete mode 100644 resources/icons/variable_layer_height_hover_36.png delete mode 100644 resources/icons/variable_layer_height_hover_pressed_36.png delete mode 100644 resources/icons/variable_layer_height_normal_36.png delete mode 100644 resources/icons/variable_layer_height_pressed_36.png diff --git a/resources/icons/add_disabled_36.png b/resources/icons/add_disabled_36.png deleted file mode 100644 index bbeeef5a8d33f6ddcd2e57ca20bf804f3b5bfca4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 831 zcmV-F1Hk-=P)9NH`o9G0?bK7 zK~z}7?U=nz>qr!UKbr(20}jCs4aNdFDG(h>LBU%+%2fCvzV z;g{c?8H4!UF7*;<3G}}M%KgbR9S({2$FOvvZ+^m;wwIR0&1IXgQ8pjNBV?RMGO*N=H_o^(lkX;6doTR+1=gE&d~PuHnwf^^76v|{yxoS zlO#!~)oSw;iK2*Un$+uc;yA`IjO>6UNy0D;8jS`~6j7;E==FN^dOgxKrC2PYC<^s@ zoo2I1wOVCkVA^ChBRaLpVx)S(~@i&CcPm*YZ9vJ`t002ov JPDHLkV1jNyflB}Y diff --git a/resources/icons/add_hover_36.png b/resources/icons/add_hover_36.png deleted file mode 100644 index 1ff71b73381dbe5a3beb69ab0a96af9933bc49af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 956 zcmV;t14I0YP)`R525d_M^xw3d(oQ?$VTEKb9!#cPO@G(-`;sTm zn|$A!SK#mHW9U>c!ZZRv?Gel;=RPJB3X#v}%L-yPoAG!&=)9o|(+Gk-hVJk3V={C+K-3FkK1$*hx6WlEYxjZnv#6F$854(xS~@&QE;w^>cj(bVW>(EBo0(MCZl zu$PH2w{eHS<~#$gmpJ=ym+>u&9&Qszd`EYCFN0@?k+n3-$whum{zA^AaN)^Onq5s? z-};K*$Ej>u$EfoKt4cLWRls$aXlQ|LCt5$relQUAOjr(+>QKfT+8G_3X53Jb~;Ew%kxg( zd-v5p9sLr3iQ5+mC%1UQ`7|+Q#yCTzQjx5hCS8zGYyNpc&`TNuI%=tCoFP%L5Ke4k zGuue!;!J%18reOW&tJWIYzDw2m~h)$+1U$X6B~>()MoP$2+q@5??qSh2&Ez?9VhNP zqm^__n!sthmmAA7^q%TB&d?(dbrRTHV18qk{`Mh$+`dIoD>8BWB6iMX%iC@_iti1Xml&6p(ruP0!^_k4bXox?UZ)f84oK>xR{vDP!jvD@5`58 zelPjn`<}o*VO+qVjv>q<05tEzd~)VvVzC&dQt41ZY&IJ{pAUmK3}F^QFfL$R8MuPo zX2aXnRTn#3$s~KF5|{tDj0IqKXQys30N$=Hc6WBDl}yvLTGAf~)CKBpCKmi?8YMdjR+ z({y?}xW4fff2NnsHKbM)ma}&mltz%m0Kvo!)Pjm;RIuA^6tp}MWrM+<5tO3L&GoMl z9bQg2JmwgR71waIIXTtt=Z9pFqPB;s6`48nF0ViSCfQPkbS_C~YmT#zy+A?8u$Wvh zuVkC~ReC%6S;;N4EAJw!GTB0=mXAj^(MkmhN{W~qVXS|QpA$csS2DSr!)|RQszfO3 zCEgi%??C?3=`R78xqY5^c7rE8Pm@xE<{7G1D-<*Zr7WX0Y5#iGsOkt9Xw`~&hOB~} zcqWR|<|JE8GxPmx6t-nPfAwn341h(j(CzABb3205+Gd`iUZPOuJOiI&iZKe6*&Sw-=l|cJb42VPI6qygNeZ@!#ZL{TK3NYo7`7z`qc;{C3_p*AKQ bk(J)xmZnh-dV-V!00000NkvXXu0mjfKkBiH diff --git a/resources/icons/add_normal_36.png b/resources/icons/add_normal_36.png deleted file mode 100644 index 10de9a22fb8801fd196de672f2391d0dee88cbe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmV;X16lluP)$hApmUJ0=qskdT-WZe2}cV&eQJGC`vv42B{sMg*ENZD|<#_g?!-``Y(hLBhs`$!pQ{u5NPfO}>2R z=AM%Sr)&vFo4L6;Jsb{`&*#euU^biadcBN~j|;~@pZfi}#cXC`Vxl5eW@l$P%;)*= z#toqs;NZy<{C+>{>+2N(a<{bbaAgGm6M(9!6@NQN45riesH;F#p#L3E?Z3UK6lEg0 zZFV!8WK@Zgrcoo*ap6oSK6?lDI!F0{Vuv9%Qj0V-dKmJ(gH^Oq&j}w03R<3z`ad}l|6=SL04DEW zC6e0V1?MZom3iX~l}bgjs*GHaP;36VL(oea0y=7`Xq+KYuna$JT?Ph5=?mPt?cdxv55`F8EUh25(qBQTJJ+w^9ZFPXB}rwoY6`;CQabH-N&7^ zdHT)`7-#62r@9F2FSE3@z(D&jzl82l)QU{rzlvT0(5W-k@J9O;?gefksI?4uhl~TV z*EtyST;}%nO;q&%C5&_fmOkS*NoHSG}9n*fLA&izIRj zl(ZsNv4OYFkMgSbHJWWL<*oKkYa_$HQHFh^)dsB!R0aC)0g0kmagZa1S^$^J#mvkM z=RBT@z(k@^TrStifz|Z%v>uPg%RUJaMG>dd$<)-8z-e561A$*iLO~so?f?J)07*qo IM6N<$f*g^yW&i*H diff --git a/resources/icons/add_pressed_36.png b/resources/icons/add_pressed_36.png deleted file mode 100644 index 54272e42ce4482a1e85cb300cae6cdb9caa01bad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 929 zcmV;S177@zP)#)WouJXFpoXF>Mg*ENZE1kM?rm>r@5|MYurV={OG)g%I>~=>^5y$a z&f|v@7Q&;!!oq@?OeU#TtH%o9a5xAA0?f?J2!}wQT)SpE9S;0mU3IatlgV&Ut@6Ru ztAY(+e{ZjDFaZ9pF825K0B8nKRrN3#3Ww_gbw3&fz;@C$bpxmY)ByV50X0AF0*WS+ zs%)}dTBoE+=!QX)(8AeMA%dQMJT2bi1IipESSv*7Xzyk`_%<%Po0?H$x0EKjagW&M z5@Y_iIQQg$^(D(3B#7mIV6bnP@pF?%hRkZ=H~uL6PQ|8h;e}~B{Tu3r(Hg43?(ZYxZ2#D zZ4dENCPGC$Kv65qzVs3AJ@-C^YMxv%Lv&}6^UuCPS;(`JS+=fZ+og4SJNkK0Tw`C_ zM^YpT<@{kj72ig!mMP0wl2V+p{xN<{|6*Oqq*@WDy_JLR*6_=NY^#Ws*GHdP@B|$oong_0w$`iS!c*DI7#IbxE*c^l^nA_zDs#m z;>&lgADRKM2{yVtJ#6pBaogLhGt}!25sNR;(;CE7s|dQrY452ca}3?YW(b_|1i7^u zVfd+0>kK{pM3~s_GD{najP_0NbK(w~p)q^+5~dDd(qe1k^}dVTiQPa@n;8v^TLPy25ba{PEmnA>SZktDlw3GE09($yFB7 z4GovQjW^Fs@k-!TI^F;6d-d42z0cLoL~x3U;8f#*)&M#=Kz6&m?jVmCYyhGtl1iuR z1`~-y5JmB5!)kth-pppRM>-+LWya_8F*i3Sa1!Gma+O5pmX1Gq00000NkvXXu0mjf D(1^2n diff --git a/resources/icons/arrow_out_disabled_36.png b/resources/icons/arrow_out_disabled_36.png deleted file mode 100644 index 0c9e5ef322ba9c47dd30b01babf5c5e19b93c795..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 723 zcmV;^0xbQBP)`dIt*xzzRORgKjJA~Q?d}>D!1L1++uPgR+}unAsQv!VbG;6L2@rWsnH)N~wV#nwpv-2m%_7 z2BvAUv9U3pBU@Nlz_KhdnGC+~qqQcJ$@J+K7Z?8|Hcgh7mjT$^+#LO1)_cLSSXx^8 zQWG_GJQ!o3&*Jv>_RGs$sZ^p+DE!lPcxa$fsnmm!QWAzC*Vos5y35N;q?9C+NzTvD zky3JUax!|LZnsOZSVT&R5CX$6Xf~Vu2~88NHPh462q7pG3gfd5&+{-%6W{k~Hk+)j zuJ-9xR#vcWo0pfDp8t)-IwJSBZ5!YB$>nk+5{ZG@TrS7!>npD7Vi?AFdMNU)TCGMH zhFn}+e5yS@J_g|K?(VO>Z0Je7zP>(m(tJK255^cM2KoSG+xEmkA_fb<^E^&ZPYJ$x zHxxy}aqv9v5#V*tX5g%nbYc`vyNTegpc$8m%^+@=5>z002ovPDHLk FV1lTCOBMhC diff --git a/resources/icons/arrow_out_hover_36.png b/resources/icons/arrow_out_hover_36.png deleted file mode 100644 index f62796c96fe010579c66d783c31e2d81b1bc5daf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 826 zcmV-A1I7G_P)?>2 zK~z}7?U-LkQ&AkpKX>kObDL?dO=s#;R%j1VTJ+j;FJV~FKlLG~&f_gO)Ee9b{pt;$^=D$sI-raM0SPC%}Bjn=W@k4Pl4svw%Ck)NNBq(&+p6h&4d-NkO!X&SY)wMj{*t*woj zNQAo2b+Lqgj*Q@TyYYIxNda=@=JKJd3jh;s?3@Nz3o0XLP&%V2qX5sP;_PG6Dr%Vm(r{~OTqwDyUvh?nVrs3%JOz246*V{ zCZ!}QqJ;G@PR+%e(5nS~)5a8@!TaQ-=P)@lfgX(_L?VEM_~UP4RmC zWt{Jk?*R_06Nkk~aC(gQ-#al9k&uv*gVtjVg@^D@`w@mfH{u&US9LL?N9Z5z$0jnk zT+)!3C9BS?A>Cx5BI`JTPyjWmvEN=E=R1&h2raq}n_N$M;b8!-?zpk?yKGJtla(sx z=_NfCg-27xm;zc-FMd3y!}oO2?@zvXX#CJXXf~8MpgRN2^DyJaC}9zzW8hhQ5A{7{ zR1cD6&7!5NiO_6_i|@`Spoa{>?XQiD8>8e{a!FIn42B2dx2w#0 zK~z}7?U+qS6k#03e>3hf?MG>Dv+jm@s;uk~rA61yUBa-Svh)yCNCoxy{IQX~yh37{x)53+exGxIbJzt5MGbovd0 zu|$HSpN^se3=IzE3t7gaN4cAD{pmYrU0J zEnbhXMCP|lN=Z^AiJNh}nxCh!$5Z-7tq}sfHz;wG@MCNkGnqt)Yyb(#`|s}5YT5=w4xq#}j?Esuwb1w6z zY(h@eMV)v5jGmgZo%v$S1I?(1{SRmh-kWy)?&kpK-<%;f9?Krk)t-x!Fi|T)T*PSW zxu4!cUAKssVTxQuw7hL1HXh^1^TS!_Axm)i%Xy+!gc7HZ0>wseyeIwmDmE-3D0X=$ zc6(@gbv8RqEi6Gr@oF?hV<2uYFg(EC<>~j?j`H1j)J25CArw`z)V~ZVWafb^A&?Rr zHYdgpgMH-(aogQfdTT4{Fro(YwL%IM6(MCd5|VWEzvH9PNx~ebrSrnH-o|H#kV4Yg z{gIBZAO0$#e{SmIt4{y5w`J3nd@=qfKz6%5=O7adDuAx*g!=k&2Gic&j;`ye!PUgT z>e7mfgu~%KCLyzxjK|~QSl4ls0E#mCuRKRadcOeCK`dfmt-FE%0000 zBCx1l?4{@>f_gO+E%y>pptj&9c7~DY2!YuE!Vu_2V#DXFZsznDgW*B!B8%&#jmep^nrsgi zlaGr;*5fBzZs&hFX?jCXFyr5ut17Rbmf)drDXjkz>oDwYQnb ze1xl?t|Xy{48i>$O-veL@~rt}C}xJELy6l~F=GfpuFXNN-9dBr?c_AIFa)K!`_L4P zv1pL7sWHy&Nj%R^m7K+4+Cd-`Kru;nyNi)RZak171X6;u~@`sn}p^`8=2cT+d)y|wP2 zwjOCq7h@VI4YUkMRn?S(EHan@oK7cgZEfrkxhC-oDzX?%Q i6^Fw?LqmhYR@7e!tRt40kv&EL0000@e2R|03hfy1S;i?Yb-KDKoP}gce;pcL~FS%Fshlu~cAYP$ZFQVo(?n zL|{=}>{4`zux@D-T6&2n(A?D#TmS89uCw!A2T_n!QE*+M{opYJ?;H5>y?Nh*2b)aF z{7Xwqi}d^bL?V$51<*8&+}vDzKA*Axbi1iZrfM2qk0&9i4Cy*EkqDP-Y7`aV&&Wu^ zU;w-x4}V5R0I&cUhOscYv#2N`P#-%w08lsEPn`rx0wsasEz4Rzcslg}04e3%5R%Fa z-;&<@{w9Qw2q6&W+_Spi>iQ>Cy7d4hnfq6S0jTnxBLxe4-6fRf>_eDh{g+HiNmN7$ z8)4jQ=M01}d~V_i%b6Xd1k@mHPV?fB~$-xL2M zTy{4uo15VD7@vN3V#XsOAtgubCm9S65||DkOo3qT9C2jua%g#Uh(MtX2IzqFd_yOJPZ(M*GH%AGJ5N-W0VteTOV@8c2nf6SY zzcdh<4RPti#W?hkDY)~qo^f-OY@3G^#lk?iKX&^n7EB??vOCFgIBDp-5uc_Orl2@$ zH=3d`9M&1080Pej*z@do;VGQzHUhx_iYnReEkFvn{y?S>NC{~c8~UWqnZolptd1qU z6~&e4<2vbD1}Tb)kTM<#NxFx+=+%3O7_&6@+*;OK{r&<{NP7Bu>HhU?RSB)RscUy# zU$wXS;N4^~{wF|It2N;u^9(A0%jF_4IG8Y)_V#vMF4y7p&EM;Xlo!sR&9<0tF3pC*8Sp(Y>$GwR^W-AEDQ+ParPc34MXmC#bq8 zNU2r`w5Ap}Nt&6-T{RD&HZ7MP2xJxmADJ_ACI>bwjOEMC%}w_H{!Wr4g#v8b=IH2% zi;D{*2mQUi&MLM|v)NqBSLyY7#7V-R%S%H5d`zdbS}k5)Ue*GNqlk|%1fT?vrs>*q zXK5&HT2gO8ThJD?>JUGfJfF|`{QM+I5~P#}A#fZA&-01}Nht|}03igf>tb0JS(XvU zF<}@I1Odm#$Jn-A%#sB`K)GC|TCHLj23l*BQW%DT=Xvbx?C|vTR7?)d=W|TcWN&Ye zEX&YZGo4PEOeQF$$g&LAbumqo*Vot8gJ!cCySuwcDOoHQ3r4&l3)q|GHqP5PSWef%b&d$z?J%@x4 zL{UVVrtI(UGa8L}e0CckMk9v9Az>Jzl*02owAPHrW6sadi?3z%dYyW`o{w*DZ&6Bp8}sYc{->B<2mKVY zy`XJD|1Ze0thGay1_9uC9^G!2MZvwHWt43@|1roLR_%5>3&XJRPKae$IF7^B)s?{} Z#y{!A7}HWnNiqNc002ovPDHLkV1l&8Gj0F? diff --git a/resources/icons/arrow_rotate_anticlockwise_hover_36.png b/resources/icons/arrow_rotate_anticlockwise_hover_36.png deleted file mode 100644 index ebc68791b88397136b061fcf939cf62cfc26188e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 799 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 Hu0mjfG{axz diff --git a/resources/icons/arrow_rotate_clockwise_disabled_36.png b/resources/icons/arrow_rotate_clockwise_disabled_36.png deleted file mode 100644 index 0733c40051c015454798ba719560f6b58008ce73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmV;$0y_PPP);f4kYu-k?OnW}~QOK*7Qn5X9EbLNE`J)|*Gjwe>;l#M;#d5VTN4 z@N*$?H5OralKHq*7H)Mx$tFeq)l4z)os9aoJkP5-?!$Zpfc<**OI5^<`{(d4rX_D|B#{k#>!{Kn^ z-Wf62(`M=!&G;TRRIo#{@`274t2!WIm$8qp|pCAbG1(H${MG=nUP_0&RT^C~v zX_^wpF;Nt;wzh`ndHGyf6h#z^MJkmFmSv%}Mk$45Sp-2qsZ`?n`Z^yE^?E%Dg#zVr z8Dk7uYr5SoolXa(6vh~;)hdNTfyc+k@dJH)d@wgRhcN~r1h==h*tU)1INaRaAcQ~& zf$#e~JUoowLrIeG^z?+35-BCi%gd~+tYqHmbUM^(HC)%_>+5U$KpPty|LiX>FEgN# zmy9terM}fg{HP9vVThCxfUB!3?(XjJeIFqN{eGWPsgz$G3d4|vg$0ySoSmIfsZ`k9 z+yuZF!|UrS^?E%YpfC(6m&+_JE@F&fX=w?qHN)W$+qQXrekMs0*4NkbD~wV~wAN^? zv-D5Xl()Ax(lljzdpo~My|c5!>FFth!63UHr4;k?^VIA0Z$;+E9@^dA<>cf9DJA>+ z`_u8-@9phnSvEE8N2Af0HE1)S8PI=$T-TjA$cVuK2!ep~^K%9{&xS@SdS3Q1$OcyJ rcH6{pockoibzOYlr`2j%Or!n+>@geAPeKZ400000NkvXXu0mjfN{>rI diff --git a/resources/icons/arrow_rotate_clockwise_hover_36.png b/resources/icons/arrow_rotate_clockwise_hover_36.png deleted file mode 100644 index 92aa3b7c86689060d977b938de03efae77dcdc28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmV+%1LOROP)>y6WwJoB9Lg}#EW9Xy9S8Zs8GSC#kSAgJr010lLPiCLx0=l^5psC?()COUt=p~ zBPMB#)`tdQ-^TP-_prRYOd^r66yk6=@caFkG@DusIvljLw4`Nqy1ToH zCla(ywQjD^>dFd%K!9K{m==)N<6&fU6aX85VHl)4+XfrEEE!M+lmVqW_MLn@6`vp& z8|Ozdj1-c5Z7)aisySA0+*;6viZT%CN6)rXRai-meiW$`k$8mZ)gbTYM!8USiTvz6 z)@<3!NI$vGTq+7G(X=dt6i6kp*=$r5SCNzFKYtGQ*uL@AvF@|ObaTy*8rI*3?L&TCBM3XT}+H;p7=> zK!za@LLj6-mV7B zj)vN^*575Fr+a96ei>m%?wx;P`Jo35@dN_@VwV7`PxxZQ48VY6#xHe%jAbcb*_Yl#kPcoG-md zZss0qj_g&Whiq3i{=9NDEdwD1Qb}w!8x@5WWaYScHu>0^J2dup1iK@HeYyJ)N}{A< zCN#tJ;xt06!Ac5BFrA8b-`?&#=yP-kZ?=w9l4v4EV5$$d;U!<{^nD5tORf@4#whmq zcr)9-^LHqmSmM|GPo$6tLsFYxPmQM*0Fe~T2ES5TREEptBDfOVdC+BF^Oo`L;hUQv zB^8Dc7|K8?6Ok0w)}dQNtr+W@J|BBR@0XVp73f5hQI;dixLx_y)uFb*R`fhCLP(nX zub{h&sH>?*nG(BlFg`m$oxi~vP}_$V3iEUh7W)xOQRX{y}QhCm2`kOE;Ul#)nO5nqinJ~xT^2d>s#v#wI#Io`qb*G4UgiH5OCA|#2A10GuC!Nnw>-O_{eq`r!D4AQ~`{FmG zkO*DUQq@Ycy9EG|7tAL3CP+zzE(E&LQOZE%g}HU; z=2#c{-%X!QK4$Ra3w+gH()l#2sa0H#D)Z`4ceD$y(}NI_&`1YfmybYmE6R}Al*ZKj zG=YXTb3omrozytJ9I9(ceZGQV zz9bU3-R`X)Ry{pEMlzW+{U=1zG+Zthot>Q)c4Pbo_3a!?w0i2%00000NkvXXu0mjf D1T0X& diff --git a/resources/icons/arrow_rotate_clockwise_pressed_36.png b/resources/icons/arrow_rotate_clockwise_pressed_36.png deleted file mode 100644 index 043d1dfa2972a2554a52314fcf7929c73cd87a70..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 770 zcmV+d1O5DoP)0Vu_H6<@aLHp!-3!LClm@jK-cw+!2^wrc|pA$90b6+(~`OXDu4>00w~{M+lomhGNX*8NBEgbAcdsN zvYUgYM>t%5)LhV-O3|0>#a?Wq!BbC({SZlD)W` zE&}ECSS&>dDUeEHwOVPYY@npn$&;yv=H$@$?@?^_BKDN+MJS1qirM%qGfOiF@fTK8 zQG?-7y!rBa`#~R5!}wepQb|(TG|}mP+`12s)ad^ZC7oL%l}l6Y_48_OVEc0@kzMA; z!gr*Q2wl?bX`#v641mZ9=3<|zt*XQ6bP`*QZ9k~ZAKuizIdXjiq@+R@0$u4SWgv3G z+&Xk)xC8y)qEE*k(f8>&RTUbkT#A+C3T~&zygJl5)PYv+LkLND;1ZgjEJJLJEYT zP)Z^VMP@C-#QYS-FSs1MVqT@bb*zW0FGFN98H7|UEX*T>pwgvrA`qmt`Ly|WSIL3X=6?~rwa6~OED@--IA8zvf! z;`Mqre^_;Obs337V$)BESv%u)yJ>H4x3ClA4;G6U@bQ_!C;$Ke07*qoM6N<$f&w3B ANdN!< diff --git a/resources/icons/brick_add_disabled_36.png b/resources/icons/brick_add_disabled_36.png deleted file mode 100644 index 5d9ddb12b0db539930132fd870b188c10545a002..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 947 zcmV;k15EshP)6>@@f=@pB}Ic$Vq}kQR^ulaAv~H8PRL-CY=7;OK|^FuSSg%HF4m?XrkC4 zhJ%8L3Q?p;4|_xt_l*4`nrzpk{hF^?Pv5M!YvqG)7DDG{dwbg{7K^l6t-b;%io)2~ z7#kZKf(!Kb@86E9D6Fike2FSYM@JZ~7JvQvCCC8PhX>Zz*U4luUjk$_n^Yek0T2P& z?e>?~PKQDKZbkhA^aJ##A^(wG4TD;(My*x@AQTD_3WZQrwf{h-X>xme%i7x7hv&Py zyJ(t*EX$t{WEckZdY$LzX8;BV2f4YqLDMt1u7K|D?pR%2 zb=Rd*iHnO1Ow$A)pU;y>Bp4YParf-)?J+$)-TR`hR;x&oL^hknwry+5T`LDuVaTCJArGRJY;cRvNFlR!}vVzC&_W)sJ8sMqTl zhJn}XMV4g*LBO&sY}@`EAj`5`>07N9mStg@CW0Vf+cu_YGB7YerBdPk{vN|Hcz=H< z9*?^&>?x3{s+^ynqiGsGpU+L$`Fh*7DVNKbrpfa1GU0HTbUKZ$>)5v4d)tqWjv|U8 zr>Cb}U0ng-^ZDFbv2B}NF2~f=6oMcSkH-O+o13FtF83Zt6h%Uz5Spf87zW43$K>;Q zyk0MXKmfnr&&$gTk|eRTv;;sZl_DCAcBN3)4M&z`VzC&(V310sLN=RaVPSzrqd}w5 zpj0ZkJ#J@b2U(W8vi*M^KU7s^Vq${H$w_j#91jl<%+Ah|PNxw?k+ZWiBuV1(@{&X% z(Vy`HAP@);2m}C_pP%RC7eB*NzAroeZMe*pbi VcGTxd?^^%>002ovPDHLkV1i{Ow+#RQ diff --git a/resources/icons/brick_add_hover_36.png b/resources/icons/brick_add_hover_36.png deleted file mode 100644 index 961f1c39578694597abf19fc90c0505f828f3a04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1024 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 b;5+I+zw3FB^5@cY00000NkvXXu0mjfv_Q#& diff --git a/resources/icons/brick_delete_hover_36.png b/resources/icons/brick_delete_hover_36.png deleted file mode 100644 index eb1687858bc32a34fd3a78ee94035fd704400406..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1022 zcmVC^V^tW3pL2UJZSP3i=?5@F8Jy4p8A)bANX%pwEL^!1Y19=9SCb427o$s; z%8HfP!PAUADv9vwSW+}~$nVuDmEbtynMIy!i|v;=?xV45bEtrG@?=S){XS3u7y z^;v>zwHl>TiDIz`KsX#G6bj+>dM_TxvMe??H%TNCr@qh3%n*yk&@}D*f&S@;-|r`z z&C=J`hm?|RHjBsOA)QX2*|Glww6(Rx=;-LF@zT;#<562*UuS4&i0ZB*|nFUDwIy^VqhHWm%+BDO6P@m&-NZp>ny* zz`y|2YL%6h6=|@X)cfug3iuP48!2? z@DL#cZEbCAY-}_Z%jI&kx3|;M(!$=}UgI1oiqd?Cq&%+QJRT34rctR>&@_#5xy1SB^pK-2-5HG)udF@W~fplGG zadDA&JdV%j!!Qi$^?GCXj^m&#KgPH79ldWozbcLyDph4u|pk{S*oX z=I7^$$K&+&_M+=LhGFpAuLV3Ex8c=y{$Aky8&E2qUoO)$jc7DVFc@Tacb9ZJ&EVi5 z<#L%nUhrcqKjzvO52)9E!2l}1yO7r-=bv14T_+Zc5e|o0TU*1nZEoFvgY@@b(-rih zx-=^L7Mpu6^x?$Clpg?rK!89Xa6GtsmwIb}%#&#-N@TDDeR!1CSKhujpnv`N-AmAR zFLCDhs}lAK=>G|H)`Gm5I$=-&B9RD_laqAbym=`wJG;9?A`#f}C#56)YZ!Nt)0U88;420vPO#lD@07*qoM6N<$f~+9iivR!s diff --git a/resources/icons/brick_delete_hover_pressed_36.png b/resources/icons/brick_delete_hover_pressed_36.png deleted file mode 100644 index 08575fd7678abf99ccfc52eb24a80c2e68798ab9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1018 zcmVC^V^tW3pL2UJZSP3i=?9ch1}C)88A)bANX%pwEL^!1Y1Gv$TutJ}#pu$d z&Q|{bT$w=7L^BCdnYbV`5{ZFATY=Po0ZO4oYw0cZejFD_4Z6a#FebdabI&>VJm+^l z-uJwMzf9goa)~A;5di8b%qJrsv%S4dqtUof5VzY+EEYrZjuev!A@3s}-F}3}?WQLh zy%co{dwU!=8a&KCL;)xr99$XEM9ol9{I2tW4gzbtzC!pFIOOQRsQHE1)Z& zE1-6p+KQjl>vhWIGNn=pfN(fWC=|l$^=suQNJ2N`HTUv(5DM zG|6PL^_#j_ETXC^*=!caac~@mLZN`y>m{8|lTN46b)7i`0*?3A3nz_{DN~mgn0RN%xkw> z52Wil3kwS*5(#`hABJJjXf&F$cN_<0=`p^YrwqRJ0Qb$8sHeXsJO3?RzAA99wa5PS zZkeB-XK85(Ap}034^=&xn{C_F=RYGc_8Ol2cZg5lMF05_kw`E&IEb$67>2=bzZUUCZ^EnZ{yoqKJy0&S&zEVMMl2R17!0zzyGtgM zVPs^4N~OXdFZeN*9&_!>2Q=z?7(n%R7xH?f{mxa_b>i_j;c%F>wKZ(p=El7@$bA0| zeL*j(OQU*VvAOR;A4^?K_yG_I1PBBICxttAXmke1KAD7)LI`V^tK#Klk-L+P;zYO@F}*WpF|ZL`h~rNX%pwEL^!1Y1Fl=Nnqh(Wa$#S zBJdCB$^?QYnn{S7iHpWah8Som4UifzKrOUrEq$fFUoIxppevd3BZjlO_vW75&;91y zd(ORZ%}ks&W@l%e-Q8UpjmD({xZQ4|(J15Nr z@bawK5c^Lo+z%Yy}kDXHn>AD5=4bTnH%bNT$&h>hoa=A>Y zR01Fr3K0wj@p`?N4`iAq+uPeD5{Wb8b8~aVVlfm&xp<&|D&qJ1$>nnN_xIyC4!K+o zkHlt3wz;{<@bEA_Jw44i^Yilz3=FhBsEfrSvMjT{ zzK(6%*tSifP{8Z;l1`^dr_-paN}*7|vMfx~B$LS?%QE?VzV!-KDisC?2dUL+tgf!& za=F;s+hcTe^vt}4g#}bq#V`zNwHlhHk)5tUsZ^p~uhZV%jx5UvA+Rh9%d##8$TUqPNy2d) z48y>(EDXay2!U^;<0ko}Wtyf5rBtoGOe!rh$vB=`$BJp^fzP>(G zRYlize*dkAr}I9%_2J(Oe0&GWrHjjDilPvWMhOH0?CY>T@feUpc zaXIA&fTn3^n)age-~o+xjrC`rLdn4ibfS)o(f;NKmk0E(hu^~lk%x(M``?tXH$eYS zpz{{wt+Z1H86X@EGd(>`*WJ5U0<*WjPdFSt`(ZUTHRY7cFv#TOq~JQ* YU+CU&`9iR8mjD0&07*qoM6N<$f}|(sjsO4v diff --git a/resources/icons/brick_delete_pressed_36.png b/resources/icons/brick_delete_pressed_36.png deleted file mode 100644 index e6fd3ab74e04e8c8fdce82cf8a817ce3ff6558ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1000 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 j@2P?Md%1h}3ZKvfmCq00000NkvXXu0mjf2)fPN diff --git a/resources/icons/bricks_hover_pressed_36.png b/resources/icons/bricks_hover_pressed_36.png deleted file mode 100644 index 4e98ca751fc9c3372a7fa1c3dfbf8fc2484e0cf8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1006 zcmVC^oK+OYfA_v0Gs6s^(197s7)u*IhJc~exG=ggMq_NWZrs?Ux-llYt*%|w zZuJjf>B@yPu~;BcQ}C-as4YRtiAxI=RC3c9>q56fs9YiG}5wLOB-(Sb0`!vRv$Q#_VkM>{nF9S}M(0KSh? z$k8`FgRpJxCcCj-eED!n7Q1-^yS0tj@EF(@rQh#R%4Wc}hz*WnM_Y;hIFDc4Zj3{I z;8Q3SC{}m)uJ9G_)N087ek$L8i|`c3o_-#H;;kE$eqKO%Ra%6k;`@yOnq9eu6D{F* zF2WE9DY4o+5b0rde_5oGSq7o;%ezQRB834$Hg3vRtH07>w{WWaB&M_whNw3;lE}~q zW^W3=P(WG|QC|W<2aN-AwZjv=<7|}+_*&sglj79pfItTUD23L#?hN4V7O5zgyl3L8 z;NXD_VGs?+NcW6zIyKJhYojb19{I1YQd_!(8EL^VZ9K=Jyp!inw4G0%JkQlt&E#C> z;Co02iSK*3zC*|g5lf|*d?rtL@eD7mUFZ1q8C0Ozh(ws~e}O*|!wjA5!oOExA>(oG zpn+r{*ev~x(h8+~9OV({fJKqy^xGdYwe%<1fO;$2FYL16thY#MNSNmS) z%Y`qfhAWJuMu>)@n1+p%f>=02`qXh!6^GSanPSCd*YPlgK$-?pHel?#A5C!nsW(|! zTV{6Y8X_8?b$~$Ps{mI8M8X!2cenD*PgzVM_9rn28WtBS{#sjW8qCbh4Doopo|StCtB(dRv9-1JuS>{bIn&wM$@|M6ASMvv cK|AUF14!m3$gbxF)?AX*(|Q>9w;Cb3enNg!QkMacnJDnbku}HA%=#A4kat&J25@Ca5@6T-3&2BfE_cr1G#<5mbvKE{8+-@Q#?VGiw;sS}ct@7D%2vwRIVTEO+H2umQOL^U=c z(!K0_H%}?E1j67KcaTaVg#|*^uFF=+KTzk?ak}*swp0jfcXKgFB4_%rJ5u<$98yWd z-d1CR+JUOZ<%y1SY!-9)MpKnG`KgZqfe8Z88e`0EW&m#|Pf1tV@N9e?>_5m77SV8w zbh3}LsdLP{*3XjVvGMs;DvNiqBXwA|gXg*ww>P*KZREozFL8CnFnKex|1~6p#P>a_ zzDr1jh^10YKC?l1{yZji#k>*dU;7W@Y#<}w}^_ZuVw!CK)D zw9#no<7$t<1k8&BXWxFGsl{K(=3LTU38DZ$uCbh1r{a28PI&(_^lInpd^-0D<#36< zR3Fh$6x(u;QVOE=A&|C(lr?Dk)<@g8^wgUyuP!mOcnuK^ zFeX4C@pV8|2Smb($6M?9;@d2?5Dz;s2x>Swx|2P0Cwr(=E7+FJNM?omxgrKZpfwdQ zKx>0i7RCe=3l+R_x%RUx{8wGP^=u0t-Mm9SXkZ|nAQo|Olug;KQrOy|NfmkHxs$aA z?L{))$h)uf^L=KGE4P-Ysz&@kqpAfi4xHe8y8B?J{XZk!*+ROr<#=N}1|5U`6{M6p zbjY5;28hSwjE#-ao=hGJ=C{>V;_>+3AFM`3M$G2s=7GP2D5Yp_Zf1CRSa1~MPglKT U-QrSKtpET307*qoM6N<$g3kBQr~m)} diff --git a/resources/icons/bricks_pressed_36.png b/resources/icons/bricks_pressed_36.png deleted file mode 100644 index 51c7c201c104f4e04f349533a48b451bc512633d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 990 zcmV<410np0P)HFe0|Q5bnwy^oKpwZEJ^`J8PC$Oojp-P$(5BR=4@4 z@CEPHYRKMRD&KyM@D-sLfzcY2!Wgrg8NlBuQc-pCzD=O?!GkPe5e>&k zcMWkqb%EJ8hFP|J@?YMdwsaRe(u8HZ_?}03JI}pnD<407g&V7e$+^tI*N_mBAn>UN z9w8@0ER|yNxjf;;i@dUSi_^DeP};B&i7?&!5`QEH893WPaKFMr#^>@ugQOO0mi|T= zg;D{Y^3g`KD3Y9i_d}+Z{v=!QNcSd*0{ptkN+w6m^Re9U!Ds08o;Ue?;WMh?3PY(O zqM<0ZMT%SgEt)`Pf1rZ3`(I(Dt2=C%E#=+pMfDGrM#X5!D!@ z5l8~1sVhw+?C@k~Ghh9X#TH_}6SZ#O=;-U}r?0D@TD^vC*^FmaSud0^2((hve2r2D z$FVR*Q!dr;tJTKOvhcrk@y_!dd@^^3qHbX%og@}6oTQ8hxJZLYv z;;p>@+Au$7Ho5-YGIghwKr5VjiOVCWxR~xcoN52xNcVJ*?&&z$7#}f^<2XkS*)vFh zcs$NuYimb_nVFd(9*;l#U^PBIZnn0z9(oBmtjx5xw=*_2COD4q4&~|L-lkToeF=~=9Mb7_ z0Z;*a-~V#&yfUcY&D1|YKR|yQ+TR`^guwTGq?D+tieVU^uaJ~-^mv{}Hk&1z&GPv8 zh?J5r4BuT!wD-UWArL~K>pDURJkLW)iKb}?A!xN)xUNe)9w(Q}jZYydC8lXIGc&{F z z-}mu6k7l#U#l;14b93VZ(lm`|G>YrGc%H{_IHce2(`vQQG>t-`KqL|&2m&0(p`2tgQz z0GOspBoZ0D6NVu|h(E5r<2X2u^YNeT`T3cfn;YWsI1394xUNeklcCXQpePDbO78CN zux%UP_fb`q%jI}@ct8k&ZQF!li064Yj>F>O zA}cE^o8?M!9XG#Y&u%!kZFrBdn5?cryH{Q>&_0qMH_pH1airw8^h3^>u0S-oo;NM3x QZ~y=R07*qoM6N<$g4bZTmjD0& diff --git a/resources/icons/cog_hover_36.png b/resources/icons/cog_hover_36.png deleted file mode 100644 index 0626cd123e8beb1ede75e2526aa256e6e3d60892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1007 zcmV|qBwyF1sLF7?w_;8tZui(j>r`Ll9Qb3__$OimK@TGx zAOR@PFn|2?JEc+y(=^`{MAI~4u^57%g>--O%KqDVMaQ@{B05X7OS@b&33^G4h-htkMzBkJE9^g0*olXbWb@6yS z_M{k!6`e zq0l`;j^j`+mjN(MlV~)GEXyxdHl0pmnkJ@cQY;oZJv}9zPInJTQ4};y!!QgC!=Tx0 zQm@y!ySqbGRT7B=ilSgy7Ohr`OeVwh^mKQC+U+*BZDZRu!C(+cl6ZQ0BA?Hr>pHS5 zb9HrvuIosWL?jX+pU+b&mGF2xWV6}VeM6RIkxV8Dhr`tCbtFlmQmHUAGsDQp2+?R1 zUDv5pD#)@-tyW`UVS%-^HS+oV>pyDCvM@~(+qQ8W2O$Lg{rxD)zmi?o#kOr+*L|r^ z&1REUtM&Rbaa$Lp@1Yw2qCz>z9yMW(&==NWtpR+BRZW9 ze!u_qfplF**LAAZDy>!v+qMxxFg7;E{rx?Tf=7Z=># z-XerxWn~4|bvZmdL{(Mh=jREB!wd}#(Qdc9XDAwtQYw|$+uP&p?2OgbRa8|)(==37 zMF_$A`Z^~kCv0zT=OjRwtT6T>hF1OjYsZc?w; zi9{lA(|&|Pp_l#C)D*|Z$5@ud($W%=B%x{A|AKjyekhenkxHfBTiAD?ccA|SQdPC* zAkPd6KsX#`cXyZ3j~{yi^YHa6;cyrp`8Kr@8;H-T->B7UZ$1f8Rh8l4VSf4RSEK_Z d=|>ys{S7#>mEgkwvmpQg002ovPDHLkV1k?e$jATy diff --git a/resources/icons/cog_hover_pressed_36.png b/resources/icons/cog_hover_pressed_36.png deleted file mode 100644 index e9c67934bdcd6dc93fbe8401821d69fb3d224395..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1005 zcmV2Q52x3qJXap4{BN!Kk8r>KregIc~fVXth?Q1vg+qZjZKY%MY zegYS4T=bc^GA6Y|iK6%l5f)$uW|%*>i&ts7Ya5W4)RWxgCO5hH<#%t+IXM!4hIofy zh#?&!0VpppKY#NRl}ZK6vR)NL(=-x^1cGmcbciI0cZd(m9|&j~(^FGJvGaSiifLKA z|MfjGK>g`yXfOcNQ&ZHRp6ET9ZQH%WOg1|ds9!#P0{CL+Yl=6ZH=sA5L5I?>i(J>G z+wJ0c9zLIsKp^n?hJ+BkWtt|5M1o{8$>ZZALI^z1qucGijv*lguIu7B4t~EM$8oSM z3n2u4zaQ6iDVNKbrpegY7|CREaE62sghC$+glQe z1o?a(S(Yi4N`o`xx-Qjf6#&b!h{xl|vfQhQ*=!ceval?Ra=Fau=_%QNSR?-vkfJDP znuckbn5Kzg7&Mzr?(gqWRh3jKg`z0fwoSX;CYQ^xw6ruBpiZZQ<2X2uLpU5pk|ds= zpD7lL=(>(9%UoYyqw6}7BoT|nC>D!UDiwS_ANhQ~zkkTKZPMv9(P)%rvxy{0)M_=B zmzSBIo+ciTqw6}gS`As2X*3$FudlPayGyZH?Ej~>Z5zw7a2yBMbrC`^Iy#D?{3YA- zJRHZt^SoYuG7N)uyWRgMYcv{MU0o3lhgn%!q0{LwGc!Y}R6>#@gb>`^+>lPE>2|xw zvdr=EG2L#LU@+K!AYIqdb)9;>PP^U4aU6sY%+Aj8@bG}^x}?)-T-U|2EDXb7b#;}E zjg7(Op?bYewOS<-iJ&M7e!rh!Fv#589P{(@ghC-SO(PHpkV>Vvyu9T6{Cu!^C>Dz` zGBU!&#RYeFcL*Wa-rmOZJdTczP*s(+wKbyAC=(MCbUK~E8H&f_R4Nrde*DPU*%>=K zJE*FPrfI0EiV%Xmy*&zr0tW{Nc%H}B*4AKaSuU4jVPSz_Fo>$ExUNg9)xt0gOw%M3 z3bDVxPqW!17K^=3`w@vmdi%x2MNUpmux*>o%}pdpLesQ=1=H7lD3i&M$z zK~z}7?U+ALB3l^7e>2Q52(m%Vz`CM{k`auBAx0ac#1CNQhp^FduZ_Le%0J)1#!p~j zV`btthQbgfisA;cP=Enum_KJLy}8XT?uuIYCMS8TlV6_my&8&394d;NSq$viR%!cS!-L{rbi3?k@R!{#}5E zzkcQ7#}5Ex0Nb|T-8;_=@<%iEC(tL*pO*5c7r3rVx7)?@JbXSMfk5Ex6%s%kwu~_V#LayslsZ;>4 zEQ?qyhAhi3DVxb;uq+G9vM7~GoSmJK$z*y5q$moSreT^UrfJe@wP-XN+~41$sw&B3 z5=Bw4ZJTzxO*WflYHF%CK%Gtp$8m5Rhj2KIBuP9yJy9qWFbo4(mbt#Z#xM*dNg^7J zQYaKCm&^EkK61I->w3txZBnTex~|h`G>{~TYPHJr^fbf6!^C1S48x#Wts=`Z^?IH8 z`FU1XS1A+(9fegdIFbrz7 z8trx)$8iusFg7;E!@~ov>yk>Pa9tP6vS_th%+AiTu&~g(9IDl7R4NrBkqC;S;P?9p z27@FL3C73A357yvnnoZHAel^(&*!2!LhP%IXsTrRV}zt8#kIV&qGsH%#lX{f4-5Q4R}HBL`Y+1}p9 z^E{T8mU{b_WwTi(CMF05gQ%*C>$)_XO2Q52x3qJXao@@BNz)qj5bDzAHd2FVPpH&#@>CMdEddtPhde~ zvCqWHSQw&2QG5##3NSD;%%8i}WAnP*4XDX_lAGM*CO5zQ?#VeP7d}`>KR4gLeG}Dc z70a^T6hPB75{U%+`}1DU zya1p8*tXq2%;s|M0`r$)L z0I)2Jcs!0Q%l)31%jK{v3(K;oR4SaGpOgECJ@P*RDT;!oX_%&oX_|C89a^mxkB^V2 zs!BSYMo|=O+os#?lF#Q^TwELukYN}&j)UVkgu`JZN#gbOl~SpMuItFM%TE*w{Q79A!n?ts3lgVU=Mx(S^EhI^zUazyXw8ZrEH1T*GUDv7C>&UW9 zv)N>AZH=9s9ZIFr;FH?6Z7j>eaU5LNMF_#@=qQTvw`|Yza2yBE^ZNCv)9KLdb_f4t z&1RFEn;XL6Fw4u!7>2>j%napn8A*~5LU4C?M<$b@*Xtq6GN-4f^m;vl!QkM5bX`Z+ zbsCKZ-EJ4haS%c4n#p7|R)hfrw$6Q=ou)V#Fs;X$3hN`LvA=usBrC2O- zczB5Cd2DWO4!4)(^Lggy=LrUbsH%$Vy0qJEI-L%tX%Y&B*xTEq)oKxo#olK8h(sd& z{ldZmXJ=>Fw#~-I29hM9Y1+Sn8R$He&1T7Fv!5gE{}f17)prN^$shwnqfwrJ{CGE* zVzEdx8vXUd>gec5G@H#|enQ^L%;e-G2L}fdA2I#{(yxVak=Guq00000NkvXXu0mjf D<8Rb8 diff --git a/resources/icons/cross_disabled_36.png b/resources/icons/cross_disabled_36.png deleted file mode 100644 index b6a138a7c1c699921cb44aa533109a350b3c8df1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 800 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 Bi!J~F diff --git a/resources/icons/cross_normal_36.png b/resources/icons/cross_normal_36.png deleted file mode 100644 index 93eaef6699dabf8f6de9d5e0580e7790695b4794..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 845 zcmV-T1G4;yP)mkVnwq{_$0 z$Vg~e7R6$*t^i%vNhXu@^z=wSK<84a(9m^ydwW+UE5pOXEEbEL=0KV_9dhJvUVyzW*1JnSmS&&p^=T-$$^Lg}K?zih&CQIwH=NKQS zSNw0K8qBswPYA=1w|jO|j7ERLWY~1;E|RV>ACFOr82Ih&waHKggRX;Nu;t-nwE6kv zn6cZ)EzM}L7}049&6b6-%!>p2*)}?c@I1u2RzlBX)9pKiet0>(gbSqVV?U5xi^`{1SZl08>*?Dp8nC zV-23I3iD5MNd25cNI)q7--jT8AV3HS#dYgD7&X_W>-s2iqzM8a5(!9jLJ*+0w$gES z0NJwZ15#a=u4|(xktS5rq~JKrKYvDMVuG(9r!m$?(W6n?Pn|}dnW-&EbzL@Itzeod z*fxc98vFb?J`G(W?>H>HpQ0(&MkE#^)_)SQ!fCxCketsGmP-(pDcGO*HkZb}kXkBW zRb}qVWfmNVFYn$Xgg_Dk@rNVkpFxY=-B|nfvgl^`HkZb^cz$^|X&TwF8+@^C^0rOp z_%VVV+iQE46}N20IdlN8yZhIzt!aF|cNgX5s}*Ca0s(kixBjIKwW=_U8)F010M!ko zR(VzUpHVR=0P%R7p`jr*BoeEFu^oqaJih$FYH)Bc%x1H7e+f}lmA1Av`uqDO)?$1I XUMwJzgOAyB00000NkvXXu0mjfSUi1L diff --git a/resources/icons/cross_pressed_36.png b/resources/icons/cross_pressed_36.png deleted file mode 100644 index 9b80bc5998d1e57b76a681b60db80fe55c3e0b34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmV-R1GM~!P)Hq-gP=7p02}LO~F< zT3k@@py;(%J&GROid|=>NhhhnM$^npG9GG+6_?hUv_jr#;KAd=Z+^?;!5UlA{6}A3 zUuant#bU9l0A1HfCX;k@bVv)Jp5ETj&~;i8iB*ZpWGcmMvB=32CnN!oaottJ0JJ0$ zWLy^j1;F?Hh0XSD+g1hj?D=y5#9B-08mI=Uf&P1t^j(juI7rRs(Q~<9?rWJWjW1te zjEyh(Ol2jQ_Qy{N!;qmpyD3JaKVUL!x_u8x*O-pSC`AnX=H|*oXdZ*EgJH1c(G#@k z>BX3VJID?7Xt5a4aSP+!dnlJH0}3J$%AQ9U1W1tx7zUdkJVeW6=PCsR@YgO<;o^? zs3^QWd=NjEBXFmX>+8^4S}~GIRI_0rGFI1FP}S;GS*R!s9X*1V&4OQo(NP!~fl`S= zDvi~BZdsUr(udTKIfMk10`PqZ0tf=1n7;8 zB+hjqTXuCos_U}hdOu2}4%IX%I1baVUXpq7g3n{)80(|x(J0NQ&md1sR2HPVE*r1S zW9li`HidK=`+N_RmoJfb9A<_`sEaibiN%O@o`A^%rLiyc z&Lyy_GIjL|GmgWj55ou{kc2?|X2h%*G~3pOwQn!8ZiX*YX`GAa7gv*}ksY|nC)*}( z+hmR(BiOOMva_tXWi!s919)w1KQC=fi4 diff --git a/resources/icons/delete_disabled_36.png b/resources/icons/delete_disabled_36.png deleted file mode 100644 index 665a56aadf80d993ca5347559f4f827c54b1a48c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 839 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 diff --git a/resources/icons/delete_normal_36.png b/resources/icons/delete_normal_36.png deleted file mode 100644 index c9f5d69c200deebee68e8bf4dbbee3d5a2850e0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 895 zcmV-_1AzRAP)V+$pj70zrJ)D|L7|`$gOa*ROw%;9N!-+H*YN_w%GA^pRm0%? zxpR^Nu(i2KDwQIW$utDi5s&lTl`8yA~AHKzXc@X)) zLGQOrtmFvH&Y~SXLiFSia^)V<)vu8j=1}kJB+k4>ysZ`M!h6_D8E+GkbsaUGrhVWr zq246+=O0t9RFP~G)i03l7jbW9X?eb%+Gj;>UHpi^-VWr}c5f0=vRNL91_?fy#QySA zY@>o>lo4ee=UyILzl&2XW2R@&jvptmwMlJZ-n)d9>=NPU`fwJnQr_Oe$}9s={zIKV z-h!1|rsL26*M6KM@Y0YsAg5G7356h=1;Zfr?)!gPw{dm^Q8WoW(~tF2+PkK9YZi{K z;}i?{?dm_)T9yMYIFjYvmf7JTl^eeh3`ek6^K6_Q`I}|R_#fX#A(ul6MZ8PM>gpyx zKaZQ(k6kbjkBUE|T^HN+A)eUJ>d%)696IXZIn>=lX-_-(FD@enhj9!U$>;kWf`o0m z;3z}}PjO@R0%cVt`1A`Nf}*WRFP`9bG0*138GjlJ@Y1^p8opW zWlC2s(w+{?g?W}1zQJCegPMuc5+V4?X|%oplvupJx4o}T!*^_$z_H=x1FZ>ag8q9T zAw&QD002ovPDHLkV1n#rqCNls diff --git a/resources/icons/delete_pressed_36.png b/resources/icons/delete_pressed_36.png deleted file mode 100644 index 99c04f5cf5a8cc74357a8a80583a13ef82fc0bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 893 zcmV-@1A_dCP)3pAvnKsgW+5-wGdxNzl?E96f| zxkf$p(sNtr0Uy3+^Wa zh&y+AKV|ZK4mFiR+rN*ek0b759Q>$R6C(#ZcMqSHOpPuqAAt^gc=)+!|ncGy>*Rbx)0Z{o{ zoj=xsm762JyPvziWl#?edINIGMWkR5vRN<;qF;UUuXU@ZMvzM;>IZ#Tzo)%h)Nb9v z(RG|s5x-q~Wvyj7;DRGq-c6Yu3Q&D;pFk*#y-;BF)X0AfSH%C$Hj23%LNM%ILRMFT z!qgOQ#}4eGf&8}oPqgb|yFTRYJ6QPR2I}tp9_~YlZpvHQDg1B)d0+^~5D|R7zaR+M zwhN9#c;Gk>QkSVH3W4_zcnFHLB7A(5l~RHHwMha;hmnDX(oA=IAt2oH|%aPkrh z>+^(9oJMNf>g`S~c6H-B{u#?wnVE0D#3)yhd-tI1-AAQd=GO~fuuxwma`Ftp?!JvV z%cQOzge`H*=_zKXZ(`47pl;%{gb5rOM(gcIivGXftJgm5eQg@PLqn*ChME_&CTR13 zWLa)Fsl1R@qf}htc^)&Q`;0D6fGz!ICA6%@k=;8*N@;mQ@@V`aV*Y!(1DgJ z#nZ;NvCTXCjx6_b;lklo>%awpl|kT_wO6t?3%*!L@5$NOndo#ngkkup0A1HvSy|!u z_*j~P{`~nLesSQfYLN&JRUP1kEz$|gkeax+r=;pOw&YB zl+OVPA@F@4&-1Wto1L8L z*+f-U!Z76i{vO}=sn_dlY-|t&0qu61(P;EB6&enQ_`c8T>ME9H;dvhIcAGek34(xp zJ`cd#+ZziD3pATe`u#qgPKVdmSJv0pXIr81c+A1U0j6ov>-888hlF8>=XpFmJ+Za5 zMYUSRwrz5`9Fxfe+qT)>-o|y^kLe*H1iG$cnkIw60Mj&CT3SMqB%&xH%QB)UB8nnh z*X8;78OL#uBx&{_Ap}{L0bm#gnx^5pF23(0%Q8U_kjv%h^?FPu6I4}2Q54cNojx~n z(BE@emMN7=c%DZb$GEObk|ZdKLN1ph3`4RkBaY*b0i|g=&9f|ZrI=7XE+@4@bEyPP+)g= zciKOnw%h0Pc^ZudrBaEzyE}vs)BCxehb+s&vaIhT>^JBe^q(MARp$r^V0e-5lpPfta^-~aSUh^nfT%VkbZP9(l!`~`k?qR-dm;Ozha002ov JPDHLkV1jJLxKaQB diff --git a/resources/icons/package_hover_36.png b/resources/icons/package_hover_36.png deleted file mode 100644 index c853281fed3dca81d6c361530884aa4f9a0d4535..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1038 zcmV+p1o8WcP)^QFN*lrxhO**GaOVSo7QzazSqACkE6;d}yk=THMY!HP# z8;FF6k}Oz;EfV7fi6FHgL<_iqs%ofO7e$$z#2KBJ=Qm##ZCJ9Y9e0u6U+~en_nv!n zBpyceBWPfxF(d$W8#DUk2(z=Z*tWf+5M9^F=ko~O5z-ivB>EA9-GhX6oq>UYhE!*G zco@sJxjcFKL4}sfWd;WaxpnJSLqKiWEPoUV0LTEY>(c0K8)P1{?1FYdj~exnJFK&a zvi<|Yv+z@Wptm=uLcW2rK8~{R8R@nzTGH*v)1ydB-+{ZagB21!^40`O2O#yICq;Wxe3*2=3T=K3-cPhFr=y31nmYplg>S-3c6XwtdywC%yIhC z2wEfxTT_UwB2wipsay~77MS?{%i4p4P!LFj!aA{*4yxrznvw|;$p{flu%^Kefi(x! z8O(*>Fs6Pby#FFXXth5wAp`_~6hez1LDOScO9cXB2~7dXybrR#S@@C7$~s;o0U;gX zdI%BJ0pte{M@k=r4QiC|-cxv?2w`i5U}2mMcM~t%jIYNCOb0wc;CKi>sC^$2zW?8| zCvYJ!LD;Cx?ZmQ2F*R`XFrMw(&Y6*~pp(N(6)jfenELeigzwJORS? z2}}piuyG9wEq)wXfbgt3bn3_f{`q-`>e@8uIZ&FwcR;v6fN%qR%fT}plu!rpu2%{C z2*tuRSnAUXA?bOVvQ>m9C{5mGWo`m(-#MC3zl|J8 z)%P!xv^}Vu7m?G?P@4Ldncw?4^y2GOmu8v&`z9pvM4$T*C2??P#}7H0Cv^NRwqb#LCLbj&DLVO(T^`@&26;kj9Xt$8DweFR7T12zVTs%m4rY07*qo IM6N<$f>DU$Gynhq diff --git a/resources/icons/package_hover_pressed_36.png b/resources/icons/package_hover_pressed_36.png deleted file mode 100644 index 57b7a97b1a23f8d723942b0dcef7c2895328a5b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1034 zcmV+l1oiugP)@&BFicZT8*i=Z}AVp#W0#=B^ zo()t&ASDZyVT;6bgG7j05NZla16}l?)2swzn(tCx7uG5ywH6)#4 zsf1qT-V(`>^XL@+*5< zpP}{45K7=<6emdLdRZ)7W3BKRWL|;viwGrLKaj8rgx0STjiqQk^FEQ(5s(hv>H|uD zf5pDum&hG>p48q$EEI0CQNDrFb^#@Ivi6|R>bEGyO|pkC5ovh}b8U&@gWvHT19!8C z-rPojMzC_5aC0YJr!G(_-e;lk9oE7)TF=|H1&NKnIC^dvcVh{oc#XiRpqpjPN|DOU z9H%c0p+#e`IfdLTAS(AsxA&1~fytk~sXa(a6^S4m(TTToQZ3)1DU~FdiW0>HYa0A8 zSaVRF!7TlOF?F5D{)f*#B)b6HE{F@p6%gV4!&vOnl^#!)(Pax%uUHzPvd_VcV0n~Umm<6yl@oksDixJ;{9GsHAEo^D2ehAfmG+YZ2t7|zu8Q;|#XGlIo|{D5caG-M z@1jK0^?l2PwueyHMU>2Q6sLY*=FdS6z5FKC#aZU>-hyPF*b5({CJ*lH_@Tt|gpa?2 z(t4JMli!2ypq+RFE%$6==b=!hpHQZMcZB_)f;3HQIAqJ90A#aS=H}-ch8Y_hBb&`W zYA0I@t517AVR?D^Kbw%9N+z97^WnXZ5F-fjq^|hHvj+t07*qoM6N<$ Eg4qDtUjP6A diff --git a/resources/icons/package_normal_36.png b/resources/icons/package_normal_36.png deleted file mode 100644 index 9cc9e43082486ad963c0aa564264fb8807f9cea0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmVV zONfMsk`An_NIVxLg4BW#E#L;Ks0Fnyit@4(=jnX;{Jk#&N+lMS+Hr=Q>5f00d+xbM z2X>z<~4!^x?>e2_+@@@^~YJGkKTe=f@<{Hw{H{fpUV1|T`yfukZ{egY$PtksE969hYN(BPuwMKK(l0^kc_ca1IFMu&Q8%s=i6&`3_b%b&F%S;k+5^gee9D0nFOWU-EXn;x zSS;RVvvLc$;}UZ6bp1i<+84;iZ8Ar%5N>-CbA6f8gP-sn19z*0-r7NcMzDI9P-_?6 zXD(4K-Dk1*CD!6iv?t!GFG$+_o#Pj-;chNtlx`3>Rdln0SuIhWo#*V8akNMjwx$tV zMWpI|Qn_B@Z7})m=k*5(p&*b5g>_LI?-|DTEe3hNj1`mI?&M5}E>%`4D7*Q~sXK>N;K|0U;gXdI%9T0OSXV zf8RR@8`LP_{b%q(5yI9AL3x4=cM~t%im%5AOb0wc;CKi>sDB?4zW?ai6SxqVAZ*mu zPGZ^Pm>M{G7|-_bEeGGUa7~-QbsGfoY-CLXB?7{Nz=psAzXstPo&aI{1g3*$*tmv; z7C(tBKzLRII(6g_fB!g2ZEXhh94IZ|J0M&jK)33pJ!na)lFG}p-MZB8D?41IJIgft$6{6i2>kpD- z6)AllDc;NK!UUDi-XnMFWpbzck@P$**&4zVlVrXbcVmHP=c!7cS2Ff1L00000NkvXXu0mjfB;VM1 diff --git a/resources/icons/package_pressed_36.png b/resources/icons/package_pressed_36.png deleted file mode 100644 index ed49516f243c5d7456c25fdd1697783c77c0f4f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1015 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 diff --git a/resources/icons/shape_ungroup_normal_36.png b/resources/icons/shape_ungroup_normal_36.png deleted file mode 100644 index 3578265fd8c8adb321c5256ab59da6389468bbf4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 841 zcmV-P1GfB$P)Gi zI2>kmb+sy>)|M7tzj*^dJwT~cs(S4l80t@2QP)5<(0>PV{L975%ggNT?O~cG9UUFV z=9iY1NT<`dTrRr1yX{Y?P$`fkwBF3uo$4fL5S1XbtY>%goNs;`8|`18Q$?XJgNz>1;hpb7a#Ru65oc^Fwj9 zd9yMgDBoBqc=3Fiov$ez4KA*Cg)kbcsx#PYbzroBldNflI29Ua!Go7 zd)fYyV*T?LD~TOe;#=gt|KQo$IbyLG!^6WwqfvVk5*nliqtV0k^faeVoA_J~oQ(!j zX_VARr7_R@85|rW5D3@@T3lQtm&;*#TDaLW#9Cqp|M}A>rIAu073ICublsU`Bc12Y zje>n`pGu_&27_di8)SCGKB9~f0)$Wqp%GFerKVKU_P&SQZa0xg1dqqVHD8>P)JUNa zQX`~7NL4-;`VePpm-Y4a9jzx(hRFRy4r^%tSO{r<+aHX9fdO*49Igv~Zry*3lI2IG zltwDW(}~-BeEW)5PcAV(KX3oXHIvCOIyy==`GM%?Jnxggd7sSl_R}xk#q(^gzhrK1 zj#w;KnS}g)KcP?v%d)uJe!P=5pI;#u4AR!tRvFO5#Kd3cXJ%$U3<_V#wgS3(TKpsA^ep`oEVPU83jHmYt0 T=|%Z=00000NkvXXu0mjfw9tNe diff --git a/resources/icons/shape_ungroup_pressed_36.png b/resources/icons/shape_ungroup_pressed_36.png deleted file mode 100644 index c89c88b558ac353fcde4dfac775efc0dfa8db66b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 836 zcmV-K1H1f*P)hNmDR*d?(h z=pYu0=}aa=xm>O(z~yog4u^?GqfN)4rxO#p#pNOx2-GE&yk$`;mwEE|agzg}u(MM) z3_vgtps=$8Kr=w4QaLVO?dYfr>h;aeweKPFiE9S^!4?T&*y8C zkYN}sEG*FK@zZwBfdaGwr9o@(T)M*S>@0r2zc!$*t}eC?Oxn*oP?{5))^MZeA-V60 z>zB4`1A^*}m4eqx)9iiC(A?tY=A9_cmh;t`Q~*p)PLfO}2?m3Vj*i;bWlB~PDOhRx z`}^7bl41RGfw!qW-X;rJ-@fze-31bf1S2CO#N%;$6A~Jv24}06>FH_CoHg*fn{l-| zkxHYaMk)gcmv$-8|GbVkI==lD5a57Ar;lV)ZDrMjIC^u z`?pH=wS6X&Args@Pj8Xi6NiW@MhFl>A%sRqjg*>7Mcexx@_0PNVllj4FE{*2DpDhb zLP(8}3L#bXTp}y#Mr*jbxGS^)=?^ z=13$GwMi%x3K5M)F-?;PU4M4c_R=*XkqDigowWf?O-=o^J~K1Z_(5xcY7cTcoppyC z85{sUpO0)VS2xVc$_hT8@8p8j`1rWq-Q7L05>l&V+S}V19v*JuG>+ddG-|4BoARUp O0000Ouxlq5My5D+D2$%ueR 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 literal 0 HcmV?d00001 diff --git a/resources/icons/variable_layer_height_disabled_36.png b/resources/icons/variable_layer_height_disabled_36.png deleted file mode 100644 index ad75a278a5e9a733955c3e780dd9b7645ead7ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 450 zcmV;z0X_bSP)W?&6k5$rCs^#?@UXNt4aZG}$6J>gej^14tetqg&#f*gH)p zB@Jmqq3S{J;NTpDAAjx?4&ZD^?IH+*Yf%)as%lUGAq3Ou6t-_S?0Ht*Fz0(>dylrX$5+DKkcOdz< zFJxJUrfE>ubvGGfpp=3!)=f$&D5Y>+w_lL1>wFbT)3mGds7PC?U3;F_FUT+qz6vEt z@}VMf(5%0cJ@= zK~z}7?bxwu!cZ87;rB>Fx=X-XFQ9bo?KlW-LLF`J0wm28(&8pMxOxL#fJ+4jq4WZ* zi*@hG5l;sj39W4r8WU)K_{b0f4(4Z$eDdq*yF+`|KbF2oc@L%1ZAYX`nb;a` P00000NkvXXu0mjf6P3wT diff --git a/resources/icons/variable_layer_height_hover_pressed_36.png b/resources/icons/variable_layer_height_hover_pressed_36.png deleted file mode 100644 index e04634f08264493229efe06a68686ee9dd516c6d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 471 zcmV;|0Vw{7P)8>;{S0c1%; zK~z}7?U+An!ax{@pA#kBB@n?6pk4cQ90WI^jyCuK#5##BZlZ&$UqEn;qg&|*uvUof zO-{THHX*h44~3Wv_ri}GUJf3fJMQ2We3Yu9NU+2h0gw$~9&a94tyXxRcTo_-Feny_ zC~lP)BZR7=y4PK<41pGqSmC8%x1HAfm*Frx(wO2 z{i~g59LI?lsMG1B%TT>u$Md|i_a#X56<;ow@d6D71O3};APw|qpj+MYa`RvD5WThf-T5(UA`J}9Or5~)0Ab&7UcUrUkzST2`v97h6=>k~MO6K^X&+&lmP002ovPDHLkV1mFjwQT?Z diff --git a/resources/icons/variable_layer_height_pressed_36.png b/resources/icons/variable_layer_height_pressed_36.png deleted file mode 100644 index 6bc8018f945e3026346e0439aad8b43a97ef012d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 446 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB*pj^6T^Rm@;DWu&Cj&(|3p^r= z85p>QL70(Y)*K0-AbW|YuPgf_b^#tMQ4{`%00ss|Z%-G;kch)?Z*0tJc93EFa9&{J zZW)Oa%qH)r=*~_!7E;qta8^XuWBa$IS4HL7^o>&aU5W?t)Es`4}z)=dLvMXf^?&7g@jl*BW*y zg@m?l(wWVnIIG~?Z0+YVr=JGtW!T8Az8WCWc0Vf9ylC#*GHr2_nLbytGPXwDy*oX+ z^Kpb;hSl6vS1;7q{ogpTEZd1g#ZyUKgrzZx_vgO<+177UBGtrQG(%S_UN1c;v3sZf z^ey`z{r(%Lm$CWgi~W1qGB3<`T$WkJw^O2u!GYu8?T _parse_colors(const std::vector& colors); }; diff --git a/xs/src/slic3r/GUI/GLTexture.cpp b/xs/src/slic3r/GUI/GLTexture.cpp index 18c9f5dea..03890d780 100644 --- a/xs/src/slic3r/GUI/GLTexture.cpp +++ b/xs/src/slic3r/GUI/GLTexture.cpp @@ -12,6 +12,10 @@ namespace Slic3r { namespace GUI { +//################################################################################################################################### +GLTexture::Quad_UVs GLTexture::FullTextureUVs = { { 0.0f, 1.0f }, { 1.0f, 1.0f }, { 1.0f, 0.0f }, { 0.0f, 0.0f } }; +//################################################################################################################################### + GLTexture::GLTexture() : m_id(0) , m_width(0) @@ -128,6 +132,34 @@ const std::string& GLTexture::get_source() const } void GLTexture::render_texture(unsigned int tex_id, float left, float right, float bottom, float top) +{ +//################################################################################################################################### + render_sub_texture(tex_id, left, right, bottom, top, FullTextureUVs); + +// ::glEnable(GL_BLEND); +// ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +// +// ::glEnable(GL_TEXTURE_2D); +// ::glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); +// +// ::glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id); +// +// ::glBegin(GL_QUADS); +// ::glTexCoord2f(0.0f, 1.0f); ::glVertex2f(left, bottom); +// ::glTexCoord2f(1.0f, 1.0f); ::glVertex2f(right, bottom); +// ::glTexCoord2f(1.0f, 0.0f); ::glVertex2f(right, top); +// ::glTexCoord2f(0.0f, 0.0f); ::glVertex2f(left, top); +// ::glEnd(); +// +// ::glBindTexture(GL_TEXTURE_2D, 0); +// +// ::glDisable(GL_TEXTURE_2D); +// ::glDisable(GL_BLEND); +//################################################################################################################################### +} + +//################################################################################################################################### +void GLTexture::render_sub_texture(unsigned int tex_id, float left, float right, float bottom, float top, const GLTexture::Quad_UVs& uvs) { ::glEnable(GL_BLEND); ::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); @@ -138,10 +170,10 @@ void GLTexture::render_texture(unsigned int tex_id, float left, float right, flo ::glBindTexture(GL_TEXTURE_2D, (GLuint)tex_id); ::glBegin(GL_QUADS); - ::glTexCoord2f(0.0f, 1.0f); ::glVertex2f(left, bottom); - ::glTexCoord2f(1.0f, 1.0f); ::glVertex2f(right, bottom); - ::glTexCoord2f(1.0f, 0.0f); ::glVertex2f(right, top); - ::glTexCoord2f(0.0f, 0.0f); ::glVertex2f(left, top); + ::glTexCoord2f(uvs.left_bottom.u, uvs.left_bottom.v); ::glVertex2f(left, bottom); + ::glTexCoord2f(uvs.right_bottom.u, uvs.right_bottom.v); ::glVertex2f(right, bottom); + ::glTexCoord2f(uvs.right_top.u, uvs.right_top.v); ::glVertex2f(right, top); + ::glTexCoord2f(uvs.left_top.u, uvs.left_top.v); ::glVertex2f(left, top); ::glEnd(); ::glBindTexture(GL_TEXTURE_2D, 0); @@ -149,6 +181,7 @@ void GLTexture::render_texture(unsigned int tex_id, float left, float right, flo ::glDisable(GL_TEXTURE_2D); ::glDisable(GL_BLEND); } +//################################################################################################################################### unsigned int GLTexture::_generate_mipmaps(wxImage& image) { diff --git a/xs/src/slic3r/GUI/GLTexture.hpp b/xs/src/slic3r/GUI/GLTexture.hpp index 3113fcab2..a7d610200 100644 --- a/xs/src/slic3r/GUI/GLTexture.hpp +++ b/xs/src/slic3r/GUI/GLTexture.hpp @@ -10,6 +10,25 @@ namespace GUI { class GLTexture { +//################################################################################################################################### + public: + struct UV + { + float u; + float v; + }; + + struct Quad_UVs + { + UV left_bottom; + UV right_bottom; + UV right_top; + UV left_top; + }; + + static Quad_UVs FullTextureUVs; +//################################################################################################################################### + protected: unsigned int m_id; int m_width; @@ -30,6 +49,9 @@ namespace GUI { const std::string& get_source() const; static void render_texture(unsigned int tex_id, float left, float right, float bottom, float top); +//################################################################################################################################### + static void render_sub_texture(unsigned int tex_id, float left, float right, float bottom, float top, const Quad_UVs& uvs); +//################################################################################################################################### protected: unsigned int _generate_mipmaps(wxImage& image); diff --git a/xs/src/slic3r/GUI/GLToolbar.cpp b/xs/src/slic3r/GUI/GLToolbar.cpp index c425164a2..fd993f5a2 100644 --- a/xs/src/slic3r/GUI/GLToolbar.cpp +++ b/xs/src/slic3r/GUI/GLToolbar.cpp @@ -11,34 +11,20 @@ namespace Slic3r { namespace GUI { -GLToolbarItem::GLToolbarItem(EType type, const std::string& name, const std::string& tooltip, bool is_toggable, PerlCallback* action_callback) - : m_type(type) - , m_state(Disabled) - , m_name(name) - , m_tooltip(tooltip) - , m_is_toggable(is_toggable) - , m_action_callback(action_callback) +GLToolbarItem::Data::Data() + : name("") + , tooltip("") + , sprite_id(-1) + , is_toggable(false) + , action_callback(nullptr) { } -bool GLToolbarItem::load_textures(const std::string* filenames) +GLToolbarItem::GLToolbarItem(GLToolbarItem::EType type, const GLToolbarItem::Data& data) + : m_type(type) + , m_state(Disabled) + , m_data(data) { - if (filenames == nullptr) - return false; - - std::string path = resources_dir() + "/icons/"; - - for (unsigned int i = (unsigned int)Normal; i < (unsigned int)Num_States; ++i) - { - if (!filenames[i].empty()) - { - std::string filename = path + filenames[i]; - if (!m_icon_textures[i].load_from_file(filename, false)) - return false; - } - } - - return true; } GLToolbarItem::EState GLToolbarItem::get_state() const @@ -53,28 +39,18 @@ void GLToolbarItem::set_state(GLToolbarItem::EState state) const std::string& GLToolbarItem::get_name() const { - return m_name; + return m_data.name; } const std::string& GLToolbarItem::get_tooltip() const { - return m_tooltip; -} - -unsigned int GLToolbarItem::get_icon_texture_id() const -{ - return m_icon_textures[m_state].get_id(); -} - -int GLToolbarItem::get_icon_textures_size() const -{ - return m_icon_textures[Normal].get_width(); + return m_data.tooltip; } void GLToolbarItem::do_action() { - if (m_action_callback != nullptr) - m_action_callback->call(); + if (m_data.action_callback != nullptr) + m_data.action_callback->call(); } bool GLToolbarItem::is_enabled() const @@ -94,7 +70,7 @@ bool GLToolbarItem::is_pressed() const bool GLToolbarItem::is_toggable() const { - return m_is_toggable; + return m_data.is_toggable; } bool GLToolbarItem::is_separator() const @@ -102,16 +78,97 @@ bool GLToolbarItem::is_separator() const return m_type == Separator; } +void GLToolbarItem::render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const +{ + GLTexture::render_sub_texture(tex_id, left, right, bottom, top, _get_uvs(texture_size, border_size, icon_size, gap_size)); +} + +GLTexture::Quad_UVs GLToolbarItem::_get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const +{ + GLTexture::Quad_UVs uvs; + + float inv_texture_size = (texture_size != 0) ? 1.0f / (float)texture_size : 0.0f; + + float scaled_icon_size = (float)icon_size * inv_texture_size; + float scaled_border_size = (float)border_size * inv_texture_size; + float scaled_gap_size = (float)gap_size * inv_texture_size; + float stride = scaled_icon_size + scaled_gap_size; + + float left = scaled_border_size + (float)m_state * stride; + float right = left + scaled_icon_size; + float top = scaled_border_size + (float)m_data.sprite_id * stride; + float bottom = top + scaled_icon_size; + + uvs.left_top = { left, top }; + uvs.left_bottom = { left, bottom }; + uvs.right_bottom = { right, bottom }; + uvs.right_top = { right, top }; + + return uvs; +} + +GLToolbar::ItemsIconsTexture::ItemsIconsTexture() + : items_icon_size(0) + , items_icon_border_size(0) + , items_icon_gap_size(0) +{ +} + +GLToolbar::Layout::Layout() + : type(Horizontal) + , top(0.0f) + , left(0.0f) + , separator_size(0.0f) + , gap_size(0.0f) +{ +} + GLToolbar::GLToolbar(GLCanvas3D& parent) : m_parent(parent) , m_enabled(false) - , m_textures_scale(1.0f) - , m_offset_y(5.0f) - , m_gap_x(2.0f) - , m_separator_x(5.0f) { } +bool GLToolbar::init(const std::string& icons_texture_filename, unsigned int items_icon_size, unsigned int items_icon_border_size, unsigned int items_icon_gap_size) +{ + std::string path = resources_dir() + "/icons/"; + bool res = !icons_texture_filename.empty() && m_icons_texture.texture.load_from_file(path + icons_texture_filename, false); + if (res) + { + m_icons_texture.items_icon_size = items_icon_size; + m_icons_texture.items_icon_border_size = items_icon_border_size; + m_icons_texture.items_icon_gap_size = items_icon_gap_size; + } + + return res; +} + +GLToolbar::Layout::Type GLToolbar::get_layout_type() const +{ + return m_layout.type; +} + +void GLToolbar::set_layout_type(GLToolbar::Layout::Type type) +{ + m_layout.type = type; +} + +void GLToolbar::set_position(float top, float left) +{ + m_layout.top = top; + m_layout.left = left; +} + +void GLToolbar::set_separator_size(float size) +{ + m_layout.separator_size = size; +} + +void GLToolbar::set_gap_size(float size) +{ + m_layout.gap_size = size; +} + bool GLToolbar::is_enabled() const { return m_enabled; @@ -122,40 +179,9 @@ void GLToolbar::set_enabled(bool enable) m_enabled = true; } -void GLToolbar::set_textures_scale(float scale) +bool GLToolbar::add_item(const GLToolbarItem::Data& data) { - m_textures_scale = scale; -} - -void GLToolbar::set_offset_y(float offset) -{ - m_offset_y = offset; -} - -void GLToolbar::set_gap_x(float gap) -{ - m_gap_x = gap; -} - -void GLToolbar::set_separator_x(float separator) -{ - m_separator_x = separator; -} - -bool GLToolbar::add_item(const GLToolbar::ItemCreationData& data) -{ - GLToolbarItem* item = new GLToolbarItem(GLToolbarItem::Action, data.name, data.tooltip, data.is_toggable, data.action_callback); - if ((item == nullptr) || !item->load_textures(data.textures)) - return false; - - m_items.push_back(item); - - return true; -} - -bool GLToolbar::add_separator() -{ - GLToolbarItem* item = new GLToolbarItem(GLToolbarItem::Separator, "", "", false, nullptr); + GLToolbarItem* item = new GLToolbarItem(GLToolbarItem::Action, data); if (item == nullptr) return false; @@ -163,6 +189,49 @@ bool GLToolbar::add_separator() return true; } +bool GLToolbar::add_separator() +{ + GLToolbarItem::Data data; + GLToolbarItem* item = new GLToolbarItem(GLToolbarItem::Separator, data); + if (item == nullptr) + return false; + + m_items.push_back(item); + return true; +} + +float GLToolbar::get_width() const +{ + switch (m_layout.type) + { + default: + case Layout::Horizontal: + { + return _get_width_horizontal(); + } + case Layout::Vertical: + { + return _get_width_vertical(); + } + } +} + +float GLToolbar::get_height() const +{ + switch (m_layout.type) + { + default: + case Layout::Horizontal: + { + return _get_height_horizontal(); + } + case Layout::Vertical: + { + return _get_height_vertical(); + } + } +} + void GLToolbar::enable_item(const std::string& name) { for (GLToolbarItem* item : m_items) @@ -203,25 +272,252 @@ void GLToolbar::update_hover_state(const Pointf& mouse_pos) if (!m_enabled) return; - float cnv_w = (float)m_parent.get_canvas_size().get_width(); - float width = _get_total_width(); - float left = 0.5f * (cnv_w - width); - float top = m_offset_y; + switch (m_layout.type) + { + default: + case Layout::Horizontal: + { + _update_hover_state_horizontal(mouse_pos); + break; + } + case Layout::Vertical: + { + _update_hover_state_vertical(mouse_pos); + break; + } + } +} + +int GLToolbar::contains_mouse(const Pointf& mouse_pos) const +{ + if (!m_enabled) + return -1; + + switch (m_layout.type) + { + default: + case Layout::Horizontal: + { + return _contains_mouse_horizontal(mouse_pos); + } + case Layout::Vertical: + { + return _contains_mouse_vertical(mouse_pos); + } + } +} + +void GLToolbar::do_action(unsigned int item_id) +{ + if (item_id < (unsigned int)m_items.size()) + { + GLToolbarItem* item = m_items[item_id]; + if ((item != nullptr) && !item->is_separator() && item->is_hovered()) + { + if (item->is_toggable()) + { + GLToolbarItem::EState state = item->get_state(); + if (state == GLToolbarItem::Hover) + item->set_state(GLToolbarItem::HoverPressed); + else if (state == GLToolbarItem::HoverPressed) + item->set_state(GLToolbarItem::Hover); + + m_parent.render(); + item->do_action(); + } + else + { + item->set_state(GLToolbarItem::HoverPressed); + m_parent.render(); + item->do_action(); + if (item->get_state() != GLToolbarItem::Disabled) + { + // the item may get disabled during the action, if not, set it back to hover state + item->set_state(GLToolbarItem::Hover); + m_parent.render(); + } + } + } + } +} + +void GLToolbar::render() const +//void GLToolbar::render(const Pointf& mouse_pos) const +{ + if (!m_enabled || m_items.empty()) + return; + + ::glDisable(GL_DEPTH_TEST); + + ::glPushMatrix(); + ::glLoadIdentity(); + + switch (m_layout.type) + { + default: + case Layout::Horizontal: + { + _render_horizontal(); + break; + } + case Layout::Vertical: + { + _render_vertical(); + break; + } + } + + ::glPopMatrix(); +} + +float GLToolbar::_get_width_horizontal() const +{ + return _get_main_size(); +} + +float GLToolbar::_get_width_vertical() const +{ + return m_icons_texture.items_icon_size; +} + +float GLToolbar::_get_height_horizontal() const +{ + return m_icons_texture.items_icon_size; +} + +float GLToolbar::_get_height_vertical() const +{ + return _get_main_size(); +} + +float GLToolbar::_get_main_size() const +{ + float size = 0.0f; + for (unsigned int i = 0; i < (unsigned int)m_items.size(); ++i) + { + if (m_items[i]->is_separator()) + size += m_layout.separator_size; + else + size += (float)m_icons_texture.items_icon_size; + } + + if (m_items.size() > 1) + size += ((float)m_items.size() - 1.0f) * m_layout.gap_size; + + return size; +} + +void GLToolbar::_update_hover_state_horizontal(const Pointf& mouse_pos) +{ + float zoom = m_parent.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + + Size cnv_size = m_parent.get_canvas_size(); + Pointf scaled_mouse_pos((mouse_pos.x - 0.5f * (float)cnv_size.get_width()) * inv_zoom, (0.5f * (float)cnv_size.get_height() - mouse_pos.y) * inv_zoom); + + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; + + std::string tooltip = ""; + + for (GLToolbarItem* item : m_items) + { + if (item->is_separator()) + left += separator_stride; + else + { + float right = left + scaled_icons_size; + float bottom = top - scaled_icons_size; + + GLToolbarItem::EState state = item->get_state(); + bool inside = (left <= scaled_mouse_pos.x) && (scaled_mouse_pos.x <= right) && (bottom <= scaled_mouse_pos.y) && (scaled_mouse_pos.y <= top); + + switch (state) + { + case GLToolbarItem::Normal: + { + if (inside) + item->set_state(GLToolbarItem::Hover); + + break; + } + case GLToolbarItem::Hover: + { + if (inside) + tooltip = item->get_tooltip(); + else + item->set_state(GLToolbarItem::Normal); + + break; + } + case GLToolbarItem::Pressed: + { + if (inside) + item->set_state(GLToolbarItem::HoverPressed); + + break; + } + case GLToolbarItem::HoverPressed: + { + if (inside) + tooltip = item->get_tooltip(); + else + item->set_state(GLToolbarItem::Pressed); + + break; + } + default: + case GLToolbarItem::Disabled: + { + break; + } + } + + left += icon_stride; + } + } + + m_parent.set_tooltip(tooltip); +} + +void GLToolbar::_update_hover_state_vertical(const Pointf& mouse_pos) +{ + float zoom = m_parent.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + + Size cnv_size = m_parent.get_canvas_size(); + Pointf scaled_mouse_pos((mouse_pos.x - 0.5f * (float)cnv_size.get_width()) * inv_zoom, (0.5f * (float)cnv_size.get_height() - mouse_pos.y) * inv_zoom); + + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; std::string tooltip = ""; for (GLToolbarItem* item : m_items) { if (item->is_separator()) - left += (m_separator_x + m_gap_x); + top -= separator_stride; else { - float tex_size = (float)item->get_icon_textures_size() * m_textures_scale; - float right = left + tex_size; - float bottom = top + tex_size; + float right = left + scaled_icons_size; + float bottom = top - scaled_icons_size; GLToolbarItem::EState state = item->get_state(); - bool inside = (left <= mouse_pos.x) && (mouse_pos.x <= right) && (top <= mouse_pos.y) && (mouse_pos.y <= bottom); + bool inside = (left <= scaled_mouse_pos.x) && (scaled_mouse_pos.x <= right) && (bottom <= scaled_mouse_pos.y) && (scaled_mouse_pos.y <= top); switch (state) { @@ -263,22 +559,72 @@ void GLToolbar::update_hover_state(const Pointf& mouse_pos) break; } } - left += (tex_size + m_gap_x); + + top -= icon_stride; } } m_parent.set_tooltip(tooltip); } -int GLToolbar::contains_mouse(const Pointf& mouse_pos) const +int GLToolbar::_contains_mouse_horizontal(const Pointf& mouse_pos) const { - if (!m_enabled) - return -1; + float zoom = m_parent.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; - float cnv_w = (float)m_parent.get_canvas_size().get_width(); - float width = _get_total_width(); - float left = 0.5f * (cnv_w - width); - float top = m_offset_y; + Size cnv_size = m_parent.get_canvas_size(); + Pointf scaled_mouse_pos((mouse_pos.x - 0.5f * (float)cnv_size.get_width()) * inv_zoom, (0.5f * (float)cnv_size.get_height() - mouse_pos.y) * inv_zoom); + + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; + + int id = -1; + + for (GLToolbarItem* item : m_items) + { + ++id; + + if (item->is_separator()) + left += separator_stride; + else + { + float right = left + scaled_icons_size; + float bottom = top - scaled_icons_size; + + if ((left <= scaled_mouse_pos.x) && (scaled_mouse_pos.x <= right) && (bottom <= scaled_mouse_pos.y) && (scaled_mouse_pos.y <= top)) + return id; + + left += icon_stride; + } + } + + return -1; +} + +int GLToolbar::_contains_mouse_vertical(const Pointf& mouse_pos) const +{ + float zoom = m_parent.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + + Size cnv_size = m_parent.get_canvas_size(); + Pointf scaled_mouse_pos((mouse_pos.x - 0.5f * (float)cnv_size.get_width()) * inv_zoom, (0.5f * (float)cnv_size.get_height() - mouse_pos.y) * inv_zoom); + + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; int id = -1; @@ -287,110 +633,88 @@ int GLToolbar::contains_mouse(const Pointf& mouse_pos) const ++id; if (item->is_separator()) - left += (m_separator_x + m_gap_x); + top -= separator_stride; else { - float tex_size = (float)item->get_icon_textures_size() * m_textures_scale; - float right = left + tex_size; - float bottom = top + tex_size; + float right = left + scaled_icons_size; + float bottom = top - scaled_icons_size; - if ((left <= mouse_pos.x) && (mouse_pos.x <= right) && (top <= mouse_pos.y) && (mouse_pos.y <= bottom)) + if ((left <= scaled_mouse_pos.x) && (scaled_mouse_pos.x <= right) && (bottom <= scaled_mouse_pos.y) && (scaled_mouse_pos.y <= top)) return id; - left += (tex_size + m_gap_x); + top -= icon_stride; } } return -1; } -void GLToolbar::do_action(unsigned int item_id) +void GLToolbar::_render_horizontal() const { - if (item_id < (unsigned int)m_items.size()) - { - GLToolbarItem* item = m_items[item_id]; - if ((item != nullptr) && !item->is_separator() && item->is_hovered()) - { - if (item->is_toggable()) - { - GLToolbarItem::EState state = item->get_state(); - if (state == GLToolbarItem::Hover) - item->set_state(GLToolbarItem::HoverPressed); - else if (state == GLToolbarItem::HoverPressed) - item->set_state(GLToolbarItem::Hover); + unsigned int tex_id = m_icons_texture.texture.get_id(); + int tex_size = m_icons_texture.texture.get_width(); - m_parent.render(); - item->do_action(); - } - else - { - item->set_state(GLToolbarItem::HoverPressed); - m_parent.render(); - item->do_action(); - if (item->get_state() != GLToolbarItem::Disabled) - { - // the item may get disabled during the action, if not, set it back to hover state - item->set_state(GLToolbarItem::Hover); - m_parent.render(); - } - } - } - } -} - -void GLToolbar::render(const Pointf& mouse_pos) const -{ - if (!m_enabled || m_items.empty()) + if ((tex_id == 0) || (tex_size <= 0)) return; - ::glDisable(GL_DEPTH_TEST); - - ::glPushMatrix(); - ::glLoadIdentity(); - - float cnv_w = (float)m_parent.get_canvas_size().get_width(); - float cnv_h = (float)m_parent.get_canvas_size().get_height(); float zoom = m_parent.get_camera_zoom(); float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; - float width = _get_total_width(); - float top_x = -0.5f * width * inv_zoom; - float top_y = (0.5f * cnv_h - m_offset_y * m_textures_scale) * inv_zoom; - float scaled_gap_x = m_gap_x * inv_zoom; - float scaled_separator_x = m_separator_x * inv_zoom; + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; // renders icons for (const GLToolbarItem* item : m_items) { if (item->is_separator()) - top_x += (scaled_separator_x + scaled_gap_x); + left += separator_stride; else { - float tex_size = (float)item->get_icon_textures_size() * m_textures_scale * inv_zoom; - GLTexture::render_texture(item->get_icon_texture_id(), top_x, top_x + tex_size, top_y - tex_size, top_y); - top_x += (tex_size + scaled_gap_x); + item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.items_icon_border_size, m_icons_texture.items_icon_size, m_icons_texture.items_icon_gap_size); + left += icon_stride; } } - - ::glPopMatrix(); } -float GLToolbar::_get_total_width() const +void GLToolbar::_render_vertical() const { - float width = 0.0f; + unsigned int tex_id = m_icons_texture.texture.get_id(); + int tex_size = m_icons_texture.texture.get_width(); - for (unsigned int i = 0; i < (unsigned int)m_items.size(); ++i) + if ((tex_id == 0) || (tex_size <= 0)) + return; + + float zoom = m_parent.get_camera_zoom(); + float inv_zoom = (zoom != 0.0f) ? 1.0f / zoom : 0.0f; + + float scaled_icons_size = (float)m_icons_texture.items_icon_size * inv_zoom; + float scaled_separator_size = m_layout.separator_size * inv_zoom; + float scaled_gap_size = m_layout.gap_size * inv_zoom; + + float separator_stride = scaled_separator_size + scaled_gap_size; + float icon_stride = scaled_icons_size + scaled_gap_size; + + float left = m_layout.left; + float top = m_layout.top; + + // renders icons + for (const GLToolbarItem* item : m_items) { - if (m_items[i]->is_separator()) - width += m_separator_x; + if (item->is_separator()) + top -= separator_stride; else - width += m_items[i]->get_icon_textures_size(); - - if (i < (unsigned int)m_items.size() - 1) - width += m_gap_x; + { + item->render(tex_id, left, left + scaled_icons_size, top - scaled_icons_size, top, (unsigned int)tex_size, m_icons_texture.items_icon_border_size, m_icons_texture.items_icon_size, m_icons_texture.items_icon_gap_size); + top -= icon_stride; + } } - - return width; } } // namespace GUI diff --git a/xs/src/slic3r/GUI/GLToolbar.hpp b/xs/src/slic3r/GUI/GLToolbar.hpp index d157f2a3b..b6eb6b19c 100644 --- a/xs/src/slic3r/GUI/GLToolbar.hpp +++ b/xs/src/slic3r/GUI/GLToolbar.hpp @@ -28,41 +28,38 @@ public: enum EState : unsigned char { Normal, - Hover, Pressed, - HoverPressed, Disabled, + Hover, + HoverPressed, Num_States }; -private: - // icon textures are assumed to be square and all with the same size in pixels, no internal check is done - GLTexture m_icon_textures[Num_States]; + struct Data + { + std::string name; + std::string tooltip; + unsigned int sprite_id; + bool is_toggable; + PerlCallback* action_callback; + Data(); + }; + +private: EType m_type; EState m_state; - - std::string m_name; - std::string m_tooltip; - - bool m_is_toggable; - PerlCallback* m_action_callback; + Data m_data; public: - GLToolbarItem(EType type, const std::string& name, const std::string& tooltip, bool is_toggable, PerlCallback* action_callback); - - bool load_textures(const std::string* filenames); + GLToolbarItem(EType type, const Data& data); EState get_state() const; void set_state(EState state); const std::string& get_name() const; - const std::string& get_tooltip() const; - unsigned int get_icon_texture_id() const; - int get_icon_textures_size() const; - void do_action(); bool is_enabled() const; @@ -71,18 +68,48 @@ public: bool is_toggable() const; bool is_separator() const; + + void render(unsigned int tex_id, float left, float right, float bottom, float top, unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const; + +private: + GLTexture::Quad_UVs _get_uvs(unsigned int texture_size, unsigned int border_size, unsigned int icon_size, unsigned int gap_size) const; }; class GLToolbar { public: - struct ItemCreationData + // items icon textures are assumed to be square and all with the same size in pixels, no internal check is done + // icons are layed-out into the texture starting from the top-left corner in the same order as enum GLToolbarItem::EState + // from left to right + struct ItemsIconsTexture { - std::string name; - std::string tooltip; - bool is_toggable; - PerlCallback* action_callback; - std::string textures[GLToolbarItem::Num_States]; + GLTexture texture; + // size of the square icons, in pixels + unsigned int items_icon_size; + // distance from the border, in pixels + unsigned int items_icon_border_size; + // distance between two adjacent icons (to avoid filtering artifacts), in pixels + unsigned int items_icon_gap_size; + + ItemsIconsTexture(); + }; + + struct Layout + { + enum Type : unsigned char + { + Horizontal, + Vertical, + Num_Types + }; + + Type type; + float top; + float left; + float separator_size; + float gap_size; + + Layout(); }; private: @@ -90,27 +117,32 @@ private: GLCanvas3D& m_parent; bool m_enabled; - ItemsList m_items; + ItemsIconsTexture m_icons_texture; + Layout m_layout; - float m_textures_scale; - float m_offset_y; - float m_gap_x; - float m_separator_x; + ItemsList m_items; public: explicit GLToolbar(GLCanvas3D& parent); + bool init(const std::string& icons_texture_filename, unsigned int items_icon_size, unsigned int items_icon_border_size, unsigned int items_icon_gap_size); + + Layout::Type get_layout_type() const; + void set_layout_type(Layout::Type type); + + void set_position(float top, float left); + void set_separator_size(float size); + void set_gap_size(float size); + bool is_enabled() const; void set_enabled(bool enable); - void set_textures_scale(float scale); - void set_offset_y(float offset); - void set_gap_x(float gap); - void set_separator_x(float separator); - - bool add_item(const ItemCreationData& data); + bool add_item(const GLToolbarItem::Data& data); bool add_separator(); + float get_width() const; + float get_height() const; + void enable_item(const std::string& name); void disable_item(const std::string& name); @@ -123,10 +155,20 @@ public: void do_action(unsigned int item_id); - void render(const Pointf& mouse_pos) const; + void render() const; private: - float _get_total_width() const; + float _get_width_horizontal() const; + float _get_width_vertical() const; + float _get_height_horizontal() const; + float _get_height_vertical() const; + float _get_main_size() const; + void _update_hover_state_horizontal(const Pointf& mouse_pos); + void _update_hover_state_vertical(const Pointf& mouse_pos); + int _contains_mouse_horizontal(const Pointf& mouse_pos) const; + int _contains_mouse_vertical(const Pointf& mouse_pos) const; + void _render_horizontal() const; + void _render_vertical() const; }; } // namespace GUI