From 513612cd0ef375a73960a1efc91e2b389b37a718 Mon Sep 17 00:00:00 2001 From: GenevensiS <66968533+G-e-n-e-v-e-n-s-i-S@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:57:20 +0200 Subject: [PATCH] Dark mode --- doc/file/format.txt | 17 +++++--- doc/function/get_mse_dark_mode.txt | 6 +++ doc/function/index.txt | 1 + resource/about.png | Bin 26971 -> 30889 bytes resource/dark_about.png | Bin 0 -> 30914 bytes resource/dark_btn_collapse_down.png | Bin 0 -> 4267 bytes resource/dark_btn_collapse_focus.png | Bin 0 -> 4265 bytes resource/dark_btn_collapse_hover.png | Bin 0 -> 4266 bytes resource/dark_btn_collapse_normal.png | Bin 0 -> 4234 bytes resource/dark_btn_expand_down.png | Bin 0 -> 4259 bytes resource/dark_btn_expand_focus.png | Bin 0 -> 4259 bytes resource/dark_btn_expand_hover.png | Bin 0 -> 4259 bytes resource/dark_btn_expand_normal.png | Bin 0 -> 4232 bytes resource/dark_selected_no.png | Bin 0 -> 4229 bytes resource/dark_selected_yes.png | Bin 0 -> 4270 bytes resource/tool/dark_bold.png | Bin 0 -> 4241 bytes resource/tool/dark_circle.png | Bin 0 -> 4244 bytes resource/tool/dark_cut.png | Bin 0 -> 4273 bytes resource/tool/dark_find.png | Bin 0 -> 4368 bytes resource/tool/dark_italic.png | Bin 0 -> 4237 bytes resource/tool/dark_mode_paint.png | Bin 0 -> 4255 bytes resource/tool/dark_mode_rotate.png | Bin 0 -> 4262 bytes resource/tool/dark_no_auto.png | Bin 0 -> 4289 bytes resource/tool/dark_rectangle.png | Bin 0 -> 4226 bytes resource/tool/dark_redo.png | Bin 0 -> 4251 bytes resource/tool/dark_reminder.png | Bin 0 -> 4223 bytes resource/tool/dark_star.png | Bin 0 -> 4259 bytes resource/tool/dark_symbol.png | Bin 0 -> 4380 bytes resource/tool/dark_triangle.png | Bin 0 -> 4232 bytes resource/tool/dark_underline.png | Bin 0 -> 4318 bytes resource/tool/dark_undo.png | Bin 0 -> 4251 bytes resource/tool/dark_window_keywords.png | Bin 0 -> 4752 bytes resource/tool/dark_window_set_info.png | Bin 0 -> 4773 bytes resource/tool/export.png | Bin 260 -> 4341 bytes resource/tool/find.png | Bin 150 -> 4351 bytes resource/tool/grid.png | Bin 122 -> 4224 bytes resource/tool/save.png | Bin 138 -> 4286 bytes resource/tool/underline.png | Bin 273 -> 4305 bytes resource/tool/window_cards.png | Bin 362 -> 4501 bytes resource/tool/window_random_pack.png | Bin 580 -> 4669 bytes resource/tool/window_statistics.png | Bin 469 -> 4555 bytes resource/win32_res.rc | 28 ++++++++++++ src/data/settings.cpp | 40 ++++++++++++++++-- src/data/settings.hpp | 20 ++++++++- src/gui/about_window.cpp | 6 +-- src/gui/about_window.hpp | 3 +- src/gui/control/card_editor.cpp | 2 +- src/gui/control/card_list.cpp | 2 +- src/gui/control/keyword_list.cpp | 2 +- src/gui/control/select_card_list.cpp | 4 +- src/gui/preferences_window.cpp | 19 +++++++-- src/gui/set/cards_panel.cpp | 22 +++++----- src/gui/set/set_info_panel.cpp | 20 ++++----- src/gui/set/window.cpp | 30 ++++++------- src/gui/symbol/basic_shape_editor.cpp | 8 ++-- src/gui/symbol/window.cpp | 30 ++++++------- src/gui/value/symbol.cpp | 3 +- src/gui/welcome_window.cpp | 4 +- src/main.cpp | 1 + src/render/symbol/viewer.cpp | 6 +-- src/render/text/compound.cpp | 12 +++--- src/render/text/element.hpp | 12 +++--- src/render/text/font.cpp | 13 ++++-- src/render/text/symbol.cpp | 2 +- src/render/text/viewer.cpp | 6 +-- src/render/text/viewer.hpp | 2 +- src/render/value/choice.cpp | 21 +++++++-- src/render/value/color.cpp | 19 +++++---- src/render/value/multiple_choice.cpp | 26 +++++++++--- src/render/value/package_choice.cpp | 24 ++++++++--- src/render/value/text.cpp | 12 ++++-- src/script/functions/basic.cpp | 8 +++- src/script/parser.cpp | 11 +++++ src/util/io/reader.cpp | 12 ++++-- src/util/io/reader.hpp | 11 ++--- .../drupal/mse-drupal-modules/highlight.inc | 2 + 76 files changed, 323 insertions(+), 144 deletions(-) create mode 100644 doc/function/get_mse_dark_mode.txt create mode 100644 resource/dark_about.png create mode 100644 resource/dark_btn_collapse_down.png create mode 100644 resource/dark_btn_collapse_focus.png create mode 100644 resource/dark_btn_collapse_hover.png create mode 100644 resource/dark_btn_collapse_normal.png create mode 100644 resource/dark_btn_expand_down.png create mode 100644 resource/dark_btn_expand_focus.png create mode 100644 resource/dark_btn_expand_hover.png create mode 100644 resource/dark_btn_expand_normal.png create mode 100644 resource/dark_selected_no.png create mode 100644 resource/dark_selected_yes.png create mode 100644 resource/tool/dark_bold.png create mode 100644 resource/tool/dark_circle.png create mode 100644 resource/tool/dark_cut.png create mode 100644 resource/tool/dark_find.png create mode 100644 resource/tool/dark_italic.png create mode 100644 resource/tool/dark_mode_paint.png create mode 100644 resource/tool/dark_mode_rotate.png create mode 100644 resource/tool/dark_no_auto.png create mode 100644 resource/tool/dark_rectangle.png create mode 100644 resource/tool/dark_redo.png create mode 100644 resource/tool/dark_reminder.png create mode 100644 resource/tool/dark_star.png create mode 100644 resource/tool/dark_symbol.png create mode 100644 resource/tool/dark_triangle.png create mode 100644 resource/tool/dark_underline.png create mode 100644 resource/tool/dark_undo.png create mode 100644 resource/tool/dark_window_keywords.png create mode 100644 resource/tool/dark_window_set_info.png diff --git a/doc/file/format.txt b/doc/file/format.txt index 87ec02bf..45677c7a 100644 --- a/doc/file/format.txt +++ b/doc/file/format.txt @@ -33,13 +33,16 @@ A heirachical file can contain a reference to another file: Where filename must be an absolute or relative [[type:filename]]. That file is included literally into the current one; except for indentation, the included file never escapes from the level the 'include file' line is on. - -If the file to be included can vary depending on the locale that is selected, use: ->>>include localized file: filename - -MSE will take the filename and add "_" followed by the name of the currently selected locale at the end of it. -So for example, if the locale used is the folder "en.mse-locale", the file that will be included is "filename_en" -You must provide a version of the file for each locale found in the data folder, even if it is simply a copy of the english one. + +If the file to be included can vary depending on the locale that is selected, use: +>>>include localized file: filename +MSE will take the filename and add "_" followed by the name of the currently selected locale at the end of it. +So for example, if the locale used is the folder "en.mse-locale", the file that will be included is "filename_en" +You must provide a version of the file for each locale found in the data folder, even if it is simply a copy of the english one. + +If the file to be included can vary depending on if dark mode is selected, use: +>>>include dark file: filename +MSE will take the filename and add "_dark" if the app is currently in dark mode. If not, then nothing is added to the filename. --Example-- For example, a [[type:set]] might look like this: diff --git a/doc/function/get_mse_dark_mode.txt b/doc/function/get_mse_dark_mode.txt new file mode 100644 index 00000000..43d17909 --- /dev/null +++ b/doc/function/get_mse_dark_mode.txt @@ -0,0 +1,6 @@ +Function: get_mse_dark_mode + +--Usage-- +> get_mse_dark_mode() + +Returns true if the app is currently displayed in dark mode, false if in light mode. diff --git a/doc/function/index.txt b/doc/function/index.txt index b363f26a..de23672b 100644 --- a/doc/function/index.txt +++ b/doc/function/index.txt @@ -125,6 +125,7 @@ These functions are built into the program, other [[type:function]]s can be defi | [[fun:get_mse_version]] Get the MSE app version. | [[fun:get_mse_locale]] Get the name of the currently selected locale. | [[fun:get_mse_path]] Get the MSE app folder absolute path. +| [[fun:get_mse_dark_mode]] Check if the app is displayed in dark mode or light mode. | [[fun:trace]] Output a message for debugging purposes. | [[fun:assert]] Check a condition for debugging purposes. | [[fun:warning]] Output a warning message. diff --git a/resource/about.png b/resource/about.png index 5c0ae3d70e1cb3b740c31af9a4c74c7912aed4bf..a63686fd4c911a27cb190d25a89a0bc4dbac095f 100644 GIT binary patch literal 30889 zcmeFYbyQr<(l<)*;1E1O1_=;!aCZhta0w8cVIULS2`<4UxJz(Jf+e^+WP%5GcMlN! zZl33y^PaQrx7JnX2M!zEMYVjsAp~y7rGv6We7vt&e;IC>cVfD6l2|ehsCa?yH=J{C zkkIY*6kV9j7l9>yfXm3JDay$Fb49>9GQ4BO6gnlTx{Wmpv{?dN2^{*=GG`zVs)BGx zh1v|(SK$P-wIASvS_UfgjUbFG`Zap0g9VvnvBnPq#V#EBd`{zNVTr^Y{tMkph z^CFUOU#Gr1|M{rYf?`|N;ODwdcN=TKRwsdU=*yqK;#0fXM0+R2yu6wtj@b^Ke4`%~ zm~gi-5e;$8SA+_LTJp1Jo{Br9Bt8%NlOgzS7%l8sJxAkBPyJd&8&9VkznCf&Bk3zc zHa9NTr!2?34zlWeKgb+8STkw`KaUGrEylNkwT54F8x#ozqb9}3V$qrZQkNnjHT(W9 zKSg28XRcFX=a1%ET)*}s`d;LBYP3Q=M-qSLzv^YAImb&oe7fkak?8Sn;~0K7b$(H4 zQ>%h>&tqTUa#PI+zE0dhcL=k!SzT2PrSqv7tk8^$j3-u5duYbd{Ba zp>{SLrsj5LFb;PcdqDJ%kVGZi?M981()7$9H+b2bIJ+gRH=3A>BY{Y6(8xPEBnqyzoc#o0=X zPFGnCBxC0Y1Mzb3a)8+(?r>LbI&mzJsH3@su!gMMKS%(d#OU5SJKGC$a=N*>ak%kt z*g0BqatR3uae}!yxw+Ya9_&uV29>|C71 z=;(m^pnuNK#$H+ZU*v6_{=o%+ADr%{_MBWCU``tw&VL`_G5|IyPKZt*|N`j5Fi-1%!c|2`35_`m4>NAG{G{jbhIFJ)z6Sv#o9!}Jto z#poWMFKliHg_{fibt%AQ3gt89He=`I0Ylk&x%dUx%>?;{*kRl}LQnxgC@;*E|KCU{ z+B!L#+CpIuqyXX^aDWc4AWYEA)WV$If}h76pu=y*F2rjNV;8g#fN}Hj^9z9aE&h#! zsv{hbN>l59pVb2?bAS|>*8*lP$SuGQ<2B=9=j8=+vzrQTGw70eV>&64ag{9OK#pt*>!2i>tW^L+h0So|i0B&n;=jQZ3 zx3u6kFimIE2Yzx1@bL=p^YC(kxw(P$^Zrk#*DyyXKo%dUa)CK`{$|O;#s~w;0a$DL zAgKU>zeWJ75tea;nL67!YT4OYi_twy3iL4YU$>P3g)%pFHkCDXh5LI|0vs|5wxBI;9D7`1{k}AFbhk zDH90vms$v$LjPWZlc_7r{I7WewEn&YeQRoK2?NfLe+cY9+u{EQVc>yT@LBK+2(X(% z1^L-|`Gw5c1%=F^?B-lh3n&ki-<)3%_Mg<9>@1w!OdVlTmH;0CUI7C77q39f|JbS* z|JmQ|E$m?*0G6?X1=;__GCnXJ=RX$9`EX+VbG4$J|1W-s{?*~%ju>Fv-)+Fr1)PMO z|2hi)!LNry=l|l*Klb7O;u8SU|9!~+iogG5*MHgdzv96Es`G!P>%Z*!Uvc1n)%m~D z_5T~Yu>L2Qg4qHdkQ)#xDJaT!0$~=q*(-Tjr2B{8Pt8T~K+9u$1wAJuBy6IGzel6< zJ~u!khO?qF1Y;ZXF%bbbyV|fV5)ueWQC3RJeP*xO&E3E)@&3NyR%Kj)r!X>#}^A2}hKLfs){WBSvz(_`U zg#wMWQz50Xt{NLQ1c#N}UmR$fQR%Lt!s*Oa1HT}~Ik^-~RSMR6mtnwi+R(HVtcPph zISyNM6rwS1iM(qOmkUN$jEagK+N@xUaNJb+o5By3ZeD6OL>Cxq%~5Z38z7cN@u9yiqtQ$TG+7lH<0GRP6^k^8vEBo-srr%i!17mm(Xa7J zONg;ZOMa0jr7~sn^lem?#j>yUKV>Y@3OC?D+?A<(m&6V%kz!aK){7`W{kVPhiBw(_ z&v4aV_Hlbn^wycQFk2bKmSAw;nIJ8Heae;3FyfH#uyfy#3Mci+HMe?_GL9?H)NgR2ahJb?!ZR^3~4k zG2XH}-lp11>_Cg|XKH?rZm1zg1Sw^e!to8C z3LRdXp0+T35Cbt5D3CBr{mJOI>gFfzQ0^?*@p($w&*)#jm8$i`t0@FfLYcw)5baY3G#Lh8t$8q z!mBQc>%C|YKcUmYajR;x%voeUAiLeyiE)|&kFzK8OCOTn5w?u z=e%D%Mz2{yJo8+F)0+a=yeIJFreG5hk$Y;BQ{zPI#i6ZpAG=~0!wWN(V2k9ARz zptl@Idok(NeU+H2NZx9CR+rO}rZa0}d74>G3^VcEv5&V9E({RMxS__1Hwzhkua$Z~ z<>GDel?=O_r!&?Egu&BNl7ehfKNZ7p|5j<}fYzGA@Bp)GO{Gq`9QH4+g~_lKDyHlM z2;8{ax-vi1@TM7Bef`aDa}9;`-UpSN0Edp1<(qsw(idG6GWKTZkBbADC5ijh)24fw zXP|6F`Y?{)XO3vD2*t}}BkjW~WTkI@rj$lv1#>sLe=(vwP4kgg@v9-+m~Cp=XjJtl z*hua=3Y+YY>@5ZvyjL7P@Y|e8=#Z47ekxk}6vfmpZ-(@CRdJ;uf|WwdHr7W}NSfjG zw(rDkYkEIHxr=Ir3uFJPCE?*g9zB87!B(N;AP)B~e^nE7(cIGX*`CtLB{Et!T{gQ5 z^U{h5`jRk7drhShHr3}ZBoBwckCS&oB=QMdy*#KIq+7#$ry2qM4j)F6E6fNLF1Qn@ z7(pSJTcq0aVrwdTTfRn=)X1P=wTLYK#}J098cA8r>B;o`H`=kDuRFHDkMjJ4h9ka| zqQWS~`Z~A3Qqy8zE0xgeT^OnPdI?9gUYA*Ink|)yH8meQ^9CB&;M?}GJS zDRw+hfkpjoCUnM1Fl(%Ip`Dq-!?N+n``bp}!_nd;ic7z{xQ>oDqv-OSwLg*i+5Q;o zB*STNWm-H?Pplbfk6$$9Mf&L?4}uK|?cU|G0C!46_&uY90(ONHxKj^Tsp+!@!t* zH)Y2hzofUh%G;LALQ09t1f$6L5rR($ehA0kweGg}KHB1VZ>)g*r@ZJ?&z0JpyB`PK zS23xb&28#4kyFoMKZOIk0Z)gmlDAa~;UKCUs48qC9?u-3qSe{gw%FZ!nN{P)voPNMyV@>36Y5Wh{W|KY8Xtoqj-5$B0)=ihm|2Zvy~h#0c5`5veoHc%F&(*u*H0zrPx<8zkNogxG2U@5ogdgw7;?BD0WJ|G zG>-m-3srY(a?1jIQz4ZgDW`O;d5kzYxM`96XfgX_xFpzbN!pxoYlcvKZBxeO5L=;5t+RYj>z91Ek+)>bDbfy72DmarqJxAd6TD%q_@-AFDzILITY zX5E^Ta4KPXx=HI#O%>yew3%){3i{4+sGPZ;{iw0A)2!? z!3sh?r&R#wg8axrNe;EQhh!+hhcpelO7FFiSrLvXNV7FJxVLPtB#8@TXj>qrRjZ9`G6M9yMDja>4qynai?#~2bB1`9&WuTm)wSOzo- zlTen+OY%4bR;t+2y~O2(6Y0_iVusei%Gi2IF(iqSUQ$GQ2`~+<>{F<)}Fig;Jj1Htpjo zHrjsfI0jk-cibM4CEJ)Ju`HI{qgmIN6XpBO2b6Z&W5d6ZmhDqaz#j_X<+}H;0w0a> za^ZB|i%SuV@RAJUIkG`A`IN^NrSrCqc$MYVf8A?}AZXNeOvUG4HK&->nLVmHCW@>} z4afWtNc7S%<=~uarIO|1kydX%k~BXm4p@XVUu2i1r$!o&odAM@^9jvuV=A@8;rubO zDa92s$$`Tja&)1F$i{iehxIV)0_JX|^-xpJc0u!=TgTLJm{4C;oAF`uM?2r$r%2>k z$a;m_@)L0k4rlu1tL&34)ClIKE;CH&t>Qf9UWcu@$@Y+i3tNqngw~jst-V!jDsP;* z7n_c+7tZ@ecPX*Hu|;fV8zNMFe;YPj9B!srEe?{{xjz|siNA^H-C){u60iOA|pn{FnBKiM6XuB#v*Qh_bx(blLidD zwn+>w2Hl=~4JE`OKR6{xxaXljB&a+G^Y0CAq>;MXx%*-?$AaD|QqZ$aC8#|5%uN*l zr6_zc{w3-8yF@Nmv{3@g(WeO@5w6|OuGYjk!qH~Wx2mwoAGMLM|JferW#O+$YQvkT zvX~T4TN5sJd`g=>dOam~5R>}D9}hy*;Zw6>!MtJm>VurqC^p&d8Ywf%bUx%Stvxlox}Z>F$Q|of|cCS|OL`ph49%PLBQ5=i|O|{h+;t z#eUpp-V*zbvjnLA`?EDj_S@?^$e)<8(irKQgRRTp4PYI&3m@Ct`SSYvg~sXG%HByd zZS627qDaR0y}8PH-{_HWEYhr|6sJLwL}5e@NJjV3kR(_@4hRLs`?s^3 zYUzu_mtgYWRcbNjLC)_ooQ1uIuU|?SUtJ&6Wd2N<4xnS*YKYFAl3)LX#GQ(xTJ96a zrz+MzQ>63F;TD@b_^F><9?9?X-vp{%u?%GISZNlksCs(jE>||i`)Bw*6QcUt=+~O0 zG1~cVHaf6;R^uB$NIt*g>?7369;HdN{xu*Mp8C?KiHJU?Xvj%0m53-tQk6>W4OMpgf}*<0a^8XNv4fC&Rr4-(NRN&rl6a=hNRupy*&LQ+@V ziW(J)tb#zHcqQJKlOSzehD=%h1D6LU0-LiwvNy{;t#z(CLEo-E?AM<^Qir=cJLYcs zPa9|e&gAYsB8CW+9#+{zSPKWSA&9Z!bHpI(x?VHe20rWB-v_f+S-*gqjChCvJF~UB zU*PTbG&~m+PIu{*#hz}w_M2x=Zj4uY8C-fblj>}e#<6yG^KIxTk<&XkYIpJx0alRU ze&jd7&8FwP{K`yJuGi&q@ro18M{HJ;qTMxL^>xp>uqMikx~YBZ67ju%uV(nRcN=xF z(_;EhvReZdZ+x6@?&ey8hgroT_^7`p}emkGA zh!FG<=gd%w%-^Z^@haU^Lw`7(DQ$BWIQXBRKSQF>p8bAUo2sdU7+ervW5Mokd~a4g zU_$eb&p#Ngh}PnY;52Y=S4k5lxaPX&sArf%@tZ;&P{bLzleOO7KAqRx-&(LbOi(;M zsM0LQM`k6E^J2J^CFKYh@^7{fg2YD@^aZl)(PgUL1KhH_%9d}&oENVBKMs%0ch9?V zK!_m{nhsPUEekZl=X<%84wTc@)WN3iBU7;yk9!>`EX2GG#pU!_aK|Wx9NHDT%n})h z#@~7%X=^uk6#Qx6lXW@6&2U;EdR_h|41_7m%90}Dc4u{-LEURHIY@nTjr+`EGJ2mm zT$-11eW%u_x4(#uQQh#BAeF<#&Ili>lzDpx#K7gOdhR&ne)-PxpyRvJx$EBYHlM0P zM;LZ2EL9R5TFOG4?quw%7aqFW*JZ|Ku4i$)GIn`%mc91*{#Z|Ab@j<~@T#<4Lm^>A zcgn<+EHjl{90S(-T1M>~H-Jd}pEyL_byxlp7y;-}P?(p)})moGn?Sw#7zJj+)JT8Ncu%S@RgDC?kMccCO* zb#;9i;%HJTT97CBLsBhnF1HfC)8`n>GbkL=cz463no8}7l!9vmF3P%xUW3CGD> zlG0oue99_C;O=lMhZQ8s;o{z*__}*_%Ogfj@I%=ya88xJE7$LnjYGxhWXvkw5Rv#p z;dXOJdUfTYYd_l0X5fsqY#-`JV~;)8VMXuZ)=&A~=cM!S4_#HI{UXbgs6`V z@d-YEp`*gfD`p7*nUSL*d-#2vKYD?5@WumU$%GQUB=3r0&U%TAQ(iS;w2+Pz3gw|6PRbKR}<@cyhC(5DrpR#|vMO(HnXtmlM!QiEfrbj{}hQQAEgyOHl4fs=B`XZH* zU@WYk-4`(=RNi?-T608zLS=K+1B}F~6JGj!l1bfibF!z}c3HG@l~t8giiY;m$-YbP z+v_ebLHaaMd)!2EFcBtx_BIQ_!GTdELMJM^3ZT` z+qrtkdlF>B5>tzvV?{g*)xjKEgP`K6zF=HN;*82 z%O}7@Rnx{*B)We=SqAvr1gKb5ksw9XPC{bHIqpY>W`5@G?yaiY+K{rr<`yniVyyhJ z7fNH2aU=mbG4gJ>DnBZ;v}NK*Ec&>~j6KlwYpu^0o;sLvtKWnehO7$i&D3X}&)a0! zuPAms8Skq?X%dcnu17j@hGa1%i@z1mqujo~ON9DZ@3k5+iMDoArVhSA=O<6_VbiM0 z5;Xe{FDs32LjCE+6VPqk2t=_e%IN!lFig$ui^Sut3X-&5YQ#Mc zkVAz4kq4Ucm{@5Y`1#!I;$m;G%g`A2=fs{u3)PPalhsfmx+1e)I^GvY(e*Mo(UW7} zW`kP8Q8YNlT^7TBDi;5GhwQlEklAOHemOwr$S5252F*Dx_Q~E?9Bzpe#tP_%9<21S zK(4F-hS*Zn21mN6@F=x{Q6;|1JtW|TE2-nw6STr2S`$hw-WNuN^Re%V1T`ZSg3EN9 zgQTi;h@CsL&V+Vi$)8X~e5r1x_N=>;IfS{*a`@bQ zTeRO0+RS6_rory!x$5Pol_n0-Nq`W$6l>uFpyz5E-(*WBqRbtop)7A(N;-!Qak74x zY%^=5`UACknitotc#qZ3R_c5h*+s)dPM5|A$WNZwi{Gd!v@4_43m}w^lMm zA~E!I1Xv^uPSO3P$oZtL^2_GRaiMU}GN_S$P^&n4I6k7n^d6-AJoP0PYihijRM}eO z4>;0qTx*LlBe%M>pybRUeXBu}{CkQG_4chat~Wi`?IR`WnyNO&X+p0P7O;X68yn!Y zHVZnND|wsjN&X(LWdqz9ZRAGAPoRW~ULCMXDia3b>Neg-vhd?S?yx+xIG=*dm)k!^4D=r%B$uYZy>iLHR6 z`ms5K;%^+phrHC6$Ilhp9AsPHAH20jMzW&6fNgOdhSl%=}>_BB!`Euo0 zuz!Rh7ex1pJM;Sdq$|8Pw0E_O#gMs|n;q~E(&RbWvqB2DseEtxZ`R0K3(8uu-a-=8 z1OrM-IX!I)hN|47y049!CN*9BlU*AQXJ^|tB~BmnfAREJW0tkECfRpsK7CpAn3y`g5zo+5Z70%Z*1=^qttmQsD%_RQ{@TeqMFt%k zs@=sKQW+pE!z?LK;bf1ql_!!}K+7w&oo*xb?z8fZbZoUba+o^KGJ2XT`y^E;z$^Q{VUPK*SpB5^_Ij$Gx| zVtskwW|kfzdS9PHx#60B`%$KBZm>I@6n{Fq1Kyyi6-$AKrCyDEp95|)LsF z{#!uEe4<(xJZl%f%uP;q9_)*RG7;r#z&lLIuo6kSzw!kkC!BL6S`^jTs56se2$Fh^ z_NC`K2^*-XHASx|WM&=Q>Lx*;W6r)af$+37Cp|2hRTZM=Zl(T(xo}&}t(?r4%t+Ju z_lpWPPo^un-0%4_=663$@9U&8K30lAr=>J+T_4UItol|vG+=<#{9Hw6QIIFg;DE9$ zl^y&I&C~*$&g9FyKLmrD2TpOgIbY49QB1@t7LZ8ezp-j!hk@)ev)_&BB~2cA`|}DzpNc#sj@>g#-7_RXeej~}{_u4~42+B)$kCByc?LgG5e=IW zu06=zy)td|(JUcuZ9TKt_?bRbQk31jBq@=_mxmt~g^yCCMS-G2y`;6|EoH z_4z9|N|>g9kIJ=<>Blip7Vk(5PVN^gFKOa>8MrcH(DeW5uD}n5f8a-?UM~=@GpA{Dhc66>I_``-g|n z)rL*?Bme8^Y9|rno0Cbsy0=_OFd`gud`GtK%eP6evB}wiq=9sI*L}(w+iBU0I}QoW zch>K6;aAS29KwluryCmD>WW};I-;l*!ADwWTin`G1YxqdH?tVx9e^{y!^^u?OBWi~ z1%%fCtP*mXWYD*+W7OSr*{e<%QJ*;hz*;m%83otY5w|394DYK2mScvv6Dc=XfHc7}d3-dI}jI)FMK~NNMc11%nOy1kNksNt%)#w- ztT`DeKYM)Z%{IQM`=OzNMy1M97Q)T*Fdt|B{|WD#RPdsI=vw$0Fb@7U2(k zR>zRG z&-e}Rw&=eYp8m?e#ygtk^a}bmB=$^-STcqHl_cgy$;)k4CCjie%`zKMG#mYXbDpg< zmCo;QD&G}FHiNp*qzNHeRx|U_T!F#uB|e+9gZFs9FTOc+3Lmsy*aAV)KtZx`JCpd? zdsOv&n@!iGyJLLo*(wUX*!rd1SM_@*0x=3&PfF~IKA{HsCl6`;^8O5}=v&mJIbuRb z5v^=ZCRNX`Z|QLXe|u-zHZOE?S&5S@C_EpeBJ4`jy9XCBIi-mlR{D_2J~d_;dx#rj z6A4EA|79Q#ECe%x6j50<~rhojRcnQz` z!A4g0&i5PJd_K6J$Sbh|+5l11tGrPM5YVW|G*H@OWb zTI7`k0K5m6n}0?w?997Q*`KzbD)5+3$FID z;H7kyE?Y1t)a#bjc&V(w&E18yJ4EYIa7YN#nLbIB6$_sV5S0j^^zO;x@!kQPH{g)x zNQQY?|9sZ-=8b)=O?u0MQPRS(XSwS-SWwWfaJM+^0PShWpjwuX$8+QB6|$)Y7!U4P z;c=GlHRyCB+pqA&?~Ahvi?eqV;IRX17-Yv{SjP+LNUhaG0?C2EqKao zQ3Ghc!$xLj5nl!FgJ(_Ebo zwLX7y-6^4u|j9-I2apN-QwFLMG3Qf&&3NMh<+j56>!roY^Z=Gti_=~>u zMiq{aWRfSxX?NC6(^5S)Ez|h(*_q||(ZI)oM}J0?UZ6jOk@=ddycu5M7k&(bf~z>B zYzAFCs^!NKhf!W+H3naPuYZFTsj7qjA@oNbv5~z$Dn<2Y8|j!q9R{x5=`rSHs`%(KZL(Oc@7A%zFG@a+jLk9b{MN?iIr(EV3OrAd^P?gW zTj=VQOK5H%zzkZxtQF1dTe@#=EU)!CM+T!bh-)Pt%6Otc3O6@Qi+M$jp1BrlmEq`D z*MC;`YpZtpnd(+bKMUPIz|Z{3KQIk9;=TGpryQt&NQ$QAq+ke~rsUY!>YEh7QSX(j z@9X@b!1o5_V$q2#5assfoJ_)W_tn$Ot={|0h6Z%1Sw^C$lORs-D16`FPjK+gopuLW zmt#X{?2ld5&D#4T-r8g;d&|&Q{$K&(4C!S8F1wJ|%ZHMiHP-3Q!phu2E5;F}ETI7k z9NA1l+&_U6bI$2PBg@My$SV2deK0ykST_q`ku@hw!|ex8VE88`PsKZqj=)7(K8(*= z?$9j;GuCk{oDVO8$P9nnUd$tGYUgD6)5T1v^)T9v8yJt$jpw^+ThCmKvtfF239_XQj>kz$fn-xp>L0wim#b3+L z1Abw;oSoTzqV4C{9pi;B)@O41Ec1LZs*ZCP9o%gF%{M5#DGGRng+Ei#jJ%f7e6G`t zD?BGvvfg{(a@x$bH7=YQEgTirs`aVvNs-`T=v6zSJ-cjc9bKHbmI-;- zz!*jB_WLZq{y8q#cs!NDrTJ{S%?M(djLMol-Ba(BK9w9i*eoxI=SFJ&L?`Y_eP?c1T8jmwsxe(sxkX3YNx5W9z>f7tf5Z);7RCSbewvf zjAhdkg_)%>hRNc__O-LsYOz50cZEq2FKz&4JD4!)tKZ&W<91 z*6!Z>x1~Rf53auX4q9a!4Fm*5V1~%Z(i3J^ZwTT63N`n~*!VQc(&<#`VKQB!Z&|en zpVO!wwcz`F04yl}?U}f2w|0lZFKWGb1gugiUY5=u{^n=8FWtZZ&vc6of+1yyS6MEe zo*|xItILeWLbQG7C8PYGD;@D6AY;(&KvmYT@zvnE#*IMrSMF|_&R)V>>vx6kdz=CN z;C$FwEp6D?tEceU>OgpuviUbSaywF~$5z9yUlgBTB}d8S8Mt01^75;!`r5XHX|vu3 z+f2vr$Rk}ho*y?F-z8Lke(g9=ZMO-W(uArE#b3S%GvI8BoMdch=W& z)z7idI)qq3?vt%elM)|yX5P>NpfYQ&Y%WRs z4ppV@bL9aZxNVkVZbO>xmvDQ*4~4rQI?8D3Tq>Yn2UXi%=^M@TEr{)ZkUqFbs9M9i z6kT0~Iv>pLx(#9n_?Z$bFvjPPmAsh#2;uHH9TG?A0986TxVR$#G=}f>$75%A9>?G` zE%*_DhP&M&Jh=vtTW`-e@r$z+G1S9xpFBX`8$UC9-#T_l)aC*lzS|=IJc^|JJXYb; zu5fHPL-n|=-+_A8t~W3Fnd91Hquki@4N#8!?SL+4xPOcKYPx0F@vNH z?!#1_2J2smqGzO6cgx1^AjluKXyek^b;Ty=jaoJ76 zJwW*xw)TxbS<4EOeazwf`!$39>4yk4{_?iR^@~v0Nz7wu%<{LKWBPs;?X*-09}PnA zJNbn?{ve`a8ig;A@s4GYDJ~wBqzwvfaxAZDs;mMI;&GHBP!e}m$^_38`{2)C=|L8AX zYP}>u-~OPC_vb>QC&MT=2LcjBwMD(&i~-6V>GbIXCW+wsaI~8T*9FMx$V)E$8XH=} zwQESTXV}S#&@oSvB}CMuid~>C9N*ss0q)S}1!Vi1Roz0qep71YcB440wx|j+Hqq1} zpXJXP05a;fcqtE5C|u;U=K5FJqyzqd$#o68f%|bm)4I*!r)n3DOKE>ywhb6GzW3Yj z^Yf!9PT$m=9NNLgB|4zy0SidpEP;Zg6{?<2i==hJl8yV*v>&QIF$3BbX?!E=PowFn z!iY|&J}@^x%ptGs(+>>jzw8PFA+xLt-vfri$^sOIq?P7u+m76~If*1mH?Il;dcw`i zD@dZ|I^4k8;aIpmh{A(|(pyz{6CJy3+H#+1S5=!w4Np7Wa30K8-*iTiE*sb;GpM9fJVuVx8vA>2$v z$2VwCBK(~%%17vg4fLFL~qzUuhqTBRt=H;rKtn_B{=PLc=Vwtf#(Synpn{+{h@cf`{PO&uNiAWKmLqsH_{P2U~F z025(!cbdLN7z6fESw=^4%XJuS&iG54l$qeepT2@H-;Z9{Z3HX~o(|M8s zDO$a>oTO7EQat?gus<%i)z#HNf*Dns)>))2eZdP?pTD)w_~0gf$cI}A`h)H=n*C|r zgBO6jTfb>6*_LM-Os`HCTP)!>T0`wv&!*FIJkWGB$MZ$6IXsoea%6O7=N#?r3>V+W zorYaq21U69^D@uPM!mW%Vj7Pl@rMw8co-DN&?wAWCyS1#atFK&xZUDFxFN@frU^ZQ_`ywfSp zJFDH2(C$!KY2sRe3bw$kEF&Prl=W4g-;^9pQqY#s5OhC`pRH}P+JU+tpngF=m0WLikX$sy#3ZK}Ytz`C7Jw&UlhHOUgEP;g2l<9` zRi`JL#1j-BHI)*E$%bh+T!`(!enZ|=Fer+iEP0E%-#7a-TOKrB-pw%M>EogY(hN*8 zW~w+$2yHrD>1|f*gpts^pdC8tr7=BdS{>$fi;Qd(x88W>OLuscd~xyzin#fTX0Erf z=QNmC2^UT)0~YQ0V@30FBWkhWvz5f@#t;*Ys=JKSS*J*%i4JE_DN=RBrsE3}S+fJ= zS|&@D-S5OD0m_CwxkBoE4)Kn8%+I3>heAgMl9q`(44lKGd8jObES~qL=nV@Xj>?aG znrSfxMSYXYF}FUhk-tMzJn@NrH`?ZflFP&iar29wwRw58=u{1Z45gVGCjdrwAR6ae z*fexSYkNSe0NHvnTVv}gawt|a2oggfa?L$wzT}C zG&_7SWkh;}jwG+zi$k6z-l6eKxf5EFAdSuc0B)#$(LMOqIRjYe@$t!roGp6b2Wi_1 z0<4hcAQpF#d5X1DG#vU(ON{8%QIcy9&tqXO2kYMK76YmeE%m#&-Kj^W==J{73Z~BhtF>+35D>>wNiYkJQm7`f>95c8B zuwwo1H;uczFXs9I&q`{Nq1GN7LGka;PR)f$5**>w1r@%yd*hVD?51YJOnlCN5%GyRymex1 zo7io!I>Af)ZOR9cwBntaKX{xjos9Wnx%RYuj2A z3VdfE(p)V-N*GtLg+a4qpj0bgb5A*tG;GwsIItfxDoHt+t5TBMGv!wu?z+;^e%nu~6I|VH!ih^in4nuBwHmKaCma0P4b98dP*~MY8PWM->Fna7 zp{}mz;u4jf_Nu!_DhMbRDD%E<{8L`;4cDj{ogd%kX=gFBEhLEQ(QULKv3mV=4cqum z7yv|C^%T{$*bw=Z@GGgK_NgiI*R-nb2o0(b#nWC?skI*hM%^eE_h^1jLydmjMOhnX zFHs2~govs+!qfU2scwZaX7G63!6@Nf07!}QmJ>@UV40zuzA^M!L|kYY8h}<87Z>LP zr2|9qM5u&@oJx*#E5w0+tY>NCDWGSiiFdcf;k{y=rJuIT)Y)8^yH80W{xc2er7MrK z@2GIlZ>29;xiSj3|H#P@qq*_QCn|x+B_~~gq7k6%41rB1-Z}4kN1tvqBRC?zREN_J z_%l9kW967Zoooi*$sy`Z2RlelCtKUZ?R-h~k{*Y2DpW->V}6ic4y4Mlnf;k6vY4mW zsFGh(g9mv%?2J3I8%+iwJOzI{3eWuQJ6S1+2e<}6X1VK$!%7&XS)#U2PD@J3hLg~O znSv%Na-*wt5rEX*3-hXy0hVVB#fTI{joHb@1L4l@?a6 z1w{NA;PjQYQ~fA%Td!uao5T)O>#zV{u8|i1SXfe=CI=!&>B5SV?I>#=b^(;>84~Gk zX18Ry?y1lh&Da%=8}8N^bI%?#Bdw0%fRu&zWITy->IGldoIE|RVn3Uke+^HK9EOGF zbCd4ZC`T}#nCGO!w~50Oks98Dk?jr6Wbq?5wfazR)55h3!?X>DTE3zv;TPc7Hr*c_ z>BL_02@VhanIeC{TVkuX2Dn(HQIm~)o?k57TGm+m^nW~eyrgv}=5m zvdv@RIMSWGJjGwd;u%{V3S$2L(>ApuB{lM6qf@t1-V$G1eS8c|ud4s{e;=?yta00fl4(1;H;d}`Ez$C-uie5mX~T| zSvvrT^J>-@Q0yk#6x>q?2VDMuoKLOfbGF9EAYGF<6_4d)8-1Yi8AylhS*mqMzDj~2 zdmus7@pH>ad*L6XrIa+!uK2s+yax+(0OXr;k+F(azyk;UIWfeAM?g$cyD5B?jB3dE zus-?vpgy8!o>D%#4|;SqwS9ilGXJmB@GR!&v2s- zsu6T4HTRLHmtO?tz?(2T!rE*Q5#+3@Z!%mVS3!{KAsL=FGZW_^_e7;ijX7q(ybkb^ zEBBT$fFjueXTaU&8+gY3CjY9Ydf)u5{jeo#y?X1l7oWD6?5P9Swc1On4g@48pjG9b zLwu6w=+@i&A*lV<&E{lADOs82`Kg60(;ToM6GEq3+Xv_R_(19^u0J2!f$RkJr=Ng? znz+e8or>-l3Tl%QGda$m2II5=YIXT$BAih$lr#}akDAM|2OCsl8rQ;s6EvHlM~f-> zc>TaetO*7we$CQOO3=4Q9F4O2AA4P8hSrpMG=e zc(G@j{_{5&djipE9O6VY82kDU)4dH)C_&Ym1NU%JWa0Fr2>wvo;F)FMv_E@0j~x-~ zc70&@z53AgTcSdW<%DQ=X`=6Hqr}Y%f3-dVXIoR%c3xZ-R-(6Q8+`ASndgp%L6=R- z`H(wL6)(4)p4hB*j3Jg0R-vW-~;44nsqeQ!r{-R;<*Hj>E2N4`q zp*Z}w-V;>X$zdklnUB6irl;=|Uo+7w45@XRk`t`0D07dpE3E~6&@m^*>2$ot9EAgj zh4>St3#{c_W{>%+gJ9KmNk2(Y+qJ|W^^E}u|7Z70vjCj_$8dbfmUMigCO+-zT`LU` zS#4SJ*Bd06J0`%R1`f<7k+V=n8DWlvgt@u7L{D^>q&wf=2;il@nYZQt` zxd5f&Jl*k;cdeYrfzRYKFILTE74Qs+f4uNMqW>Umx^nzMWK<5{UA<}*gQr$Pdg`sD@kW&}FBp5$b{n2QnHz6}wvb+Ga?;D|6KFVj5k5nQhlYW3Yv zyY3?nF&|79_^7S=<*0T`p-3~oM;=IeV|=|_Vent6@2^_ZJb1NPOI><-R&g|`hfP_> zkp`7bEdJ%B1^HaZNA)QxEc4msFRi@ag3juYx3BrmI*H7xqr^a?^g5%DGI-o52cYvv zEi&*gE<8EWnFkkqa?Lmly7<#J|1cP=I*X%EN}EJ zX#275olflpPxqXJPBWhSBxyu)n@<}Odw>*_ZNz{w5hda5kr8zX5wJ3J)ZJT=sM1Ct zoZ_i+mDwftLCdM?-tH6-E)eilyBK&)lVr56(Xp6uwH%Lg#+~WvguJ|f=@q)18!X)C z>|S1~`Ycrr%e_A;ztGUvk#})n2LLI-ngJl%XuX>r@{*fY#8%z7!R9!wm`h1kr@Fmk zj$ZwP_q`4Y9Rs6(6PsqX=UhJQSvZXs+x!xQbgr)te1COcR#00MV&{GB$)@Yh9lShI z7Jg*L74B4|*f>>Nx(yUnL;9+^e0^70#iO2pGF2*T^D=?*F-^VLBWma4H>XDNCV*sP zHzsOp7l(734p8;Z<1aj&rp3$^;FdiLk)5f5h#N0eKS$1G@Kkv%y7c}9s+h%?ug~eM zIgg&w7>EGpDiz{j)4(TS6(>Xa?3o+AC*pVH*7DhEH8Z46ivSg{6ZKvbRtLOIIOe7E z&*%AOMf19ccJSY*Ch-OFuo+$~6h_FqXK`ZtrcNWfax1!thv?~>*bis^U@gJg)=FD_ zVj8WQ;ANk7@y&Kc)xkS5$0X?D|EcLJgW}qnZHy4yU4y&326r2r;O+!>2=4A4+#$F_ za2+HBcOBeazr%g?eo#d*#hGoryL|Kj?R z0Z=!fKUrEHx=nO>|BL|m_CV=ZqiA25XQiJ4A5^+x==Jl~XPp$_2ikTWW5W0T0vPmN zFZ~m5hpnW%oD$d#7qBwG+Jupc=e8RTYTpOj6#@ko(Y(dOnJ_ocKlsl*$;M$LBQyiz z0A4e6w*Id4U$Y?2JUfHL30ZWJEwR*xmdp(fQPhYGUMql8%nC{Sl6YEOlS@=pT zxq6u-8df*K9pgCB^)uwfqgpT$dHLi(n*(D13J25`iEgOSmtP_cpJh}ra=x%aNv6(H*)QE4%}tyhqG! zF7!&OI|KgWuD1@xYo>jCDK02NU3doUBQ9$JZ8UXa4yR&S;#s`S^hBjl3 z1Tn`h+eZ|m4o?qp+m#^*hr0U1P*}>})la*l4-z#sYMSw2Lu#xe5)`;+9BI%#pZxjY zpySP-t2n=+CWLIh)RHyDI$;m}hym|Azn2@FC||Jq>iPLKuU{ip;Tsoxg;cXZqK@mO~ z@196{ZZqnknkDVL!ltDKVY)h+ezDTg$yyb6G1`WMV*FLF$5D(d7Pi>R(*qDn^b^{n zpS#MHsimF8$e&)1vs^Rr)ss%UFxpznw?2U*P06DCG3bVqZE%2sp+lqJ^(IutSgjv| z-A6u5%+=cV>(3f_Db|?PekPiP3+q3n1~?j-qvOdJq)8Xz#SO&KcwC)bgKh^a%TAKT zyEU{xSrdaq;H&1=a=R7J34X}a_$en5OYnI83~`!d>@D2&j6)DV9#oGoP1Keg`yZ_H z_*SR$HllCX*>at$i$^lqqV1Z+Mg2c;!AuV@KDMvE0XaKy-YTc7BYhL%d%UK(tG06T zb_4a0%YY($XKB^>E;~lF5K1rXDwk!LTq@YhT}A-DtKLkWIDw^>A=BJUqt8%ONs5?z ze&2XppF5~RgvZ!WsDOHPdrQQAUY>+H-S0nvzxbyy!!3Jg{}gwj8+z?F1|1GSXiVRf z7Y++a+YTQH30dLebnSI=5<#NW-H^}!&ZAe3h5|-w1L>rm)=zlvr;tu|+bM1S?6VY=)Vl(TxzvgTQ1a!k^Pgla}QQ~gZz?Hg_3w>&~ z@*tyxuyX3p@wE77DkHxtLb6E7t{y*(4AV zxiuot!wL#Y)G5>$7X{N6IT9zKDm6x|{QNl5a%9TX zeBs99Y%y-uCrjPotO)n(_4AZ`|DhKHWl3q~p0Se?!-@%H{5UcuY*9o&kY0GwROFj! zj0Q5v!DP!r;oQYcwU_1}JB*s2v`OLBT5|!%IRgP=YXS>eI!$5uw(S~pEZjb!4lSs) z7!e8OV+jg;19fe#LC^3Vb)p@;Y-j>eVM2Uyf1Gs=lK1T-D?jK=+k(nfOXm*RG7$I} z31OAJ?`4`UHjtj+0KC^q*M)v%#gG)}21#OK`h1nO*^5XX>4x8H*9^yTk@goUTcHmd z^FRk{!uhu)X0pkYHJixFDI8;Kpx=Vt`nuo8lClxM=lrKLXxF&$f-oF=MHTIdUbgQ% z8-9+9o!2tUpshv`cHYPs^4+VssCgX?HaB4bjZ*p&9?1sxaECTd^$%*Zu6cjKEClm!H4%Z$KKJJ-p^M^@J#&tVk~I|P1QM$ zeS_ETGkr!gNJC^MwEUz`t?%+ZrcnZEAn28TeTBb7QjFrH3TGV^We`5nQpk(TC6I2a8>7C;%cL18xL#Lzn;G2)vkLsD!YU#&$40U z@J-iRlF6c}s%mx`k~4Olc)U6LdrF72CGaj9ymGd7DMwwPdujC+=qj#()hVVIcVoA(2Bw!E$t7%a~E4}r^dHcD8`!jlAYJr zuOTLy08dBt9a}mADvWX_p9$2GEpS_+dF?&F_Qji+T};KS;qy%B8#Tpf&{Qd48Edka zB{`JjqiWwqIQ?5{l*w0uoZWHpKCQ;N;1ThPwrGeAp|tJ$UXW*FGz(gE!r^s_ zjq%>MTntM+X| zwO>jt;5!O7C<8kaNEfoqNXJQQ7T{Sml;yNyWF0nG(pRuUTe(< z2RM{l$7<;;uUV2DV07l}GjF0j(z>}F-ItcuhSxfut3|eV&|(BfxFJ~z9CN@>v5p2U zD9Lo3bwU7I#(C`8bc6l|j<)@b%>Hqfn8E}d%L0B)Dhkg;Z^$6eNx2FQs1m*O@v^)2 zuTNs-^X7i_EDYkdR#K5_@v>SiK%d30hIi>-yE1bNaBvW(oTeLP9NMT??yV=m*s8}k zAQ%L|1e@jal_g=m+m73(P$)Po1B!%1Sog8OFks*2iI-JWqnvoaN$OpRk3JVh)_RJi z)m=Hcxh<(uxz1B0hY3r6(KhQjYK`y&?_O>fEs-l%^apQjGCfy)b`g-2E7h1Hx#Gzl zrTsN&Olr7~yiYWNBO$5hE10aBZ#px7d1Pzbv11BEorH$LC@x-eUV)2^#hi7v&xP8z zWpj#^YRq6Vy@wup6&e$CBL63FwQtZ#HeqX_j;T{M#WvAhlZA3&If%6R2dpYr| zO=5526Y`us3O*rkpIX-|ndB1wyr6W8$}epOz(q8pjg~p8*BSO}Iz5W|^b5z)f6w0Zdps@Fp!(5kwf1Ly^7pUu6cat-V`HmN zu<2FPGb`Y1h)c-2A2@>}ege{RabVSabx~gO9TR3+bk2!PELW+?&2-fCP;WT3DA895eW<(9Q?KA zGd&2Fx2OJU@Zo^BbUGwtw$3JFkm#8kFUJd?`bYxPB5-P|!`f|=`QZ_IXxE_+ zsBmBQTqAQOwW=0_D$o9S3vP_+J@CcwU(}s_WAXeEs#QsY{pl%vwoDarG3fh%<@HpA zw0Tbx#M@-IHTvpK%h+|pGh5L?b+ja%Dn;nKZD9LyHCSWWposeI!nlY6sm}RO4b>EP z&QYpxPO+L(*d@e}c_NrH2Y#*s^0oOA*1fEdW=1;Ag9c+3d8bh~_9wHErGr1vH)6O~ zxnPVgdh1IVybcmUcGY2pjxRR=3atI-puwgAhPi(T)}9-&+pOiUh=*Cun=2bWtbB@Xs3h_dHf=UQX7KctTg4kAqGQO!uLR;8nZCx zEL#i$o1~iH!WY$DRUz}!IMls~>+-+Fz)CYn)i4kAsrc2S6r0a{N!7wtjiV(j*SaEy z4_AxQ?x_w$@3xQFgUJeu`%vfcVEQG6-dNLZvQ#*`N|wWmpK3Ry92Am0!Yo5FSX!EC zoil8Y<^%Z7?~J@QW+y;&+e#`JO$dfGQY>3W&@GoY zOQMPTniYJW81Zy9mNS4)yOy~hnCtYXgY(IO_VplYbB+2jut^To?ObAx^w0mAc;#4_euRl^|9;eF2r@q9WkCvnGXGKze8|$1KJli+a&{Rnu^xBT}$f@K3tu*w^gu-RZ{(zYrOHG#c!2L6Ge*M z2jWe%9r|bJblMX;UwqyUzHytEE(O9M3f?9V06T06`o6(9-UU=jq0u7bS*PH-0!w2B4b? z>|H~V5`#KbicI9uDmfz0_nac#rcYD@T|o;0A_kVqxB153Ro$QQR%O2mg0bwLGxshP z(X%~WIA34V6n;RCo9uyIWWz-ecR4B0qCP*E>j;~H=>7Tra(2CeUZqyP>F7m zf-ZpZ?Go(YzX*Dq;|8{q?twTMn zW&s-Io}hwwi!tL5gZ7%WSF%+;3k_ct^Z_oDYPI{vvZ70(*B5HUqqPYjT)W#I6c}-? zZqEk7+Po%LOt5K!&G(%DE|s?{;|RD$LhSAxgCUH6nBcp`V~2qz1v?ID9TUg9-Owjn zylW305)=hml^5$DZw)BW<{M=?bd9Dq3p+)kz*I9oymln?JsduWsg`Q^k9UGfV^zKr zT;Ip{&l?jexMJHSVrPs^&t;iR%%ca>z>ejs5r9LPJ5RYS8z*T}XO`sbUxnzF-ac(n zK`q~9D(964Ct(ZnNiigevKq2g@<1c*NbR7G?W1Hq3(1MiU?iGef8na}{>z?}aID;N zlP*)LR&GG>3&7PgdXm8kH71wJKtc07EW@s_ysfwrPght~%-(*y-5@!uB{Pm-i5Wfs zOXm#r!8_DOrdbB@YnAKD3&HAn<12;_rlgPWz?AOA!V0O^=9)ksj!g1-X@(tn);I|@ ztndA-tD+rSGbCgUNo1FQf`4?cv%~53>f&v4=Q_^81+1Drx2=Z@XWMA_ghaiUd_W@z zEL|sNtJx~JxUY>im&t;Uv@|<3uFEerBZZ)h5;TJ1Oqag6P!clB23#PG-6}%r$_Wdz zuk!9MS40o;?L6mSzU)1HB#{8&+3J3YU-6zJ-~+5dz-gLt|M0YU!5TFt;^{oo{nG6; z>U3*thqmST`C=D;D*C7YbjlOkQ-hJ#!5dn?+Hn6dK9+3@)3>yz~?b$QsjQUHBW_R0px`haHpC8p@PEC33Y+jAu=~K^8k!zXUw--7!4M^{9U`(VbJw0)ys$qx?-vJxIWaVH%D1}8c=uN zE55bYe-#iow<99SLJ@6n9?b(1WU~{#)oWMZiT=ZC;;o4Kel!@MkfvaQzSRgQ=3Kij zE79SCeg|*eKmB;;neCbUdUu;4RRn^EAKOLCxku`5D;i=2-DfgAtInugX=TYWjMmTm zI?1^@5)Z)E=M=kbGby_&tVJ(JXpir0?_>y{`P`tD)OkWzRx}+sSDHkeBK^1ipumy) z!8j(5Xr{mcMnx{fBj7R_Jory*{vdq|Ssk4QEG<#+*O~8Xj=Em`X%&I(n0QV*7exIi z)=W`W2C#0KywRg4OF4e%Ac>uS!Hrc>-NBgCi7B#3HI07*hOIduSYz=v-qarsc=&wZ zbGGjSkDy4BPHQy*{DD}Vk@8+VZFqQDSXlKwvrt({WBSPh^k?_CQ(Ze+y$irQ#VT~M zOmd&0A-_$Jd3ML~24ssAjnm*5wML-@o|rp*Z?iPiqD)5BetY%9K0KI3@HG%+6;5mF z-VShHjUGPJOvjI=I)hE93l!^g3B1Y;vT83cnrt-Qf`s9nT+VhaklOo>S}Vlvq*Vw%-KPCzL3l&-7Aosz`_rO&>_o))aVz5o_3Al`yLBYy zWXn{JsD8ttaDS3fiS7ad3H09tbA=1$_A}rt&WUP~9m$5$fP>aZ2)VtdwyyiLmF9CE z7GTVRW{)?O=ojvW!QJcY#O34MIe?YK-H_WqK0*VZ-a9@#JSeee0bIksl;4gI4=GLi z>~&ItA}}v&t*X%)WCd#cKAE$_6|-=`@`$R{FYIEh212sFF-0xyYu>we77>(EPKVpC2r#;6oC9ZARr*K z<3QV9A6RF0Gs9LwY1oLwI*Hdm?*Qey>ks_*35-e7KvJ(bM(f6qUNps9j-;|c`S8!| z(-Qttsfy*K$)-HkZ|_vYkp>H`>u7;QLv_qiml{L`!@CU4*6#&npy;0ZrMZ656Ud!;!rJW2AQ&3u!SxqQbyq%wo46R? zU@rk84yB#T>BLd;I7bfn+7|pY*=Q#Ug3V4do&{Zpd({ffwroRYg$`Xx0}AhStNf3x z=1YiJ?Zya@EZ_J2hJHX|Oo12!KqFLlnfxR(q<@))3#3@c`)WXGbm0n>#M_Q0vpNpc z<$70!6

qUdJgK&7}ve(Kbu%ZeT67ELVX-VZu?{UwN@NSV?6TC1nGv5SL5F*E_;S zYme}?wwDYoLo54ud%XXt6j8Egz*&6G=l535-|IylmZ$@g!5F z4%DK6lpt_z%zUOIc9TB?3_~nD_C-lHp6q_*@IAX{WarC5`yIKJ2yFPzeU4o{%D{M0 z0d7K0rpP-+6`)_$6g8t%y#7-Zr5D+nms*832FV)GK65Ltv0F-2RcOY^FFaz<+YD7= z+H^M_7C%DK0-f?QC}R9iW7b*QXOu8Y^HlL3N+k9$9Ol=K226>BHQBrLxvsEFwJyoY zf0VPc%VESOzv7fHg7i7_n}QFva#mlJMhZ!$r^fHAA;0se1b7|7HMB_yW%6i*QwUTC8q)=g0_Ex~l$vno8w1K{sLI4SGK|#pi1wWp z6{1Eu9sfyD^rzDQV*~CcN6ku#Ju7QYz9Vv3)_+k_CM@lT{G1>f^e1s;A~#fpSgB$u zvLHv_9fazg#Y5fxe|-iN6o?TY#e8tfO>@gwT4X=7W}&fnxbba6V4H_#^&FrgFzHQ~ zX6a>RWkF4%n1iwu!#l0}MA*a$!(j+IcJ>Q6!6#T}CTu#uvC;hfLkilc;pi4jEr2|z z$j&C{F@3F(+G)pOGpk*n4Dgd<_xGubC@H!4+(S2=sJD+;H$N{}ryH|i%?j%&=15Z* zIha2om#_qvZL#riKIK-yi|F+99)^v7$X-C`by7P2h1G)#^G9Eull>JP=a!B}_wY18 zXT@Nn>u-g=H2t=^VmWu2;wdISrly07n&h87O3$j zoH3|8a8nkwwJL=2D3Wmk*V^GYg1>pd87fQkk1Xv2E9mO#HfY;VNX4*(r>w{*9YzoV z`F0;t7+c9kSgmB|>BG#wnFi}^ zY*WK022ljZ^@Un&h!az!mb9#MtCX>0X4M47c%9{NyXn6wxjSq6i}t_^Dl1OR6Tk^( zNuxy!_CCT4$a2BQkpN(Z&$jW#JXo!2#g)eIOzE5Eg)r6kKqKZ!XZnIutd$jd29~)R zdw!u16gsD2y`$DwYf(mUm=ry`oKSq=fD|7JWzz8EZ#vvYf^b!-a8y_!s5RDaIRrS* zZo2RjG7barg+QSKp1kZF|BGT+ce`|9FWO1ifNXoyPZUzAPW*;YI!_PNpiE;!`xcv@ z#2eNhe@o2M8Z^3f;4htU^_8T{kE9rLfQ_Le8uKJy9A}x~H<}NV$!lS<^=H&DFjfRL zpgb3l+5FsWSTcV8aCZ!kVs1sG z0fb2&{DZD9+YsB{cUewQOVP`$^y{c$7ALMV^Be(I@dEO)X(wNO9t{CJK{uqSf0<1O zX|VJWQPnufAx-NpQe`_e@wqDbY#z$wATvtzjiiDo8$D{ zRs1gVEq{DJ&lDzBHk>5iGJP+&k$_ASmNWbpCHbVQz{3U<8ecFSEdgBxtBrL}jkyn2 zTk2Sm#ikR1U-G4P?DknYaXNB>yfsN#SqLTiobwL?JhFbl{ZWD(#!*9ioZyY=O&Npc z6?3+GAiqK-5yfQG6kjR3_gLg^ZEcezS2jO(>~pN~e)1ls#77`0@$*}NM*w4JA-)76 zkQB*sgg`vjTQ=@KM+j%u^C(>UQ-Oq(ME{}0Pzo3S6DaaqpOVcug0t9z!`5}?r$Cl$ z=BmPS@oqx9fm)9u?zr@#-c@b5mSvY4l%e45H2b*=J8!R<|FKvyqbwnX9fYrENK|w z`9=uoeVo$zFMqY4dQ>1KG?*jdG{ZtsiWD(co~#l7T-_VFP(zPOH4`;g{OW>y6I9vv z_Ft-T4u+k%5PlAaSriBa35fFV0?`?MOj&==9y!&&oY<%xbPmA-8?qSIE_*Bg@XdCw zOaw{0L*1QJ_!c3jt=1~Ndj4}cqQlDo80;&A`qqR(98SqWrJmCgD%8ef5Vf4c+;LM- z|6e%;8~u$uvA!+SRFcUh{i*k|N>gl`odu`fg7?giHz(a}3GGLVhkJ*olnKMZBlgGR zH+#@hdtYKWP2W3*Z|xEIiwL1yIPC|7-X`_fBjTEVEYOXh(1snn4oY<^s`(u}wYvB0 z1)$s1L$!M^NOxQQ=qcD%g)`r;`MCe~H82Z;n4)Vs+Y_`yR+%S*x&d&m?>Q8KS>xmJ z#*cg;1J-hSp+cEERWCc+gB z?muMMTAqgR{^T{M4lILJYi4@C(D+I|6Jn0*s*N8{OdqI{-cHWu+Z}O#qOm z-A+$~m1LTx9yEW6O-Zp=!mEjvm5@yFz2i2PS4SRlc5n{k@a`~}Ge{4^Q{eE_$)`!* zJ15-U_v>Yc^D*4oT6CMgFNX=r8i#x(6~}`c&tNb=VF!)uJkuv96HvjkR(M(e?+oYh z%q0nMQs}5*io)Ycd0iGAjF`Bi_EFJK#9}Xwsdr)=^F;Y7cE~CGe}gw(X_<8G#kwsA zyVbMQaz<(j6v*VIaz^ah+_NPBSjO)4!vi!nZhG(0 zf=KG{r({*2Xp*Y1%?a-Q2z|yE!~DL(%7x$&f{Xd)9t*U z%ajhJKRmI|QBlZLl!CPE(diES2>!4e1TGeZwRf?d6G=`KsI$a~31!n|~} z$&D>2)&Jvf)No7$2ARar}G|awv(^Q*HTz)m%v*X1&901V=hZsARvFP@Hs#QNj@w zhPpMIVEZB5XmEgJxzF3 z+~N!CQN}6?$?$RfFW=BYRE2VRtk;b8; zh?u9&Nx7&(nLgd1$*#50OM1aWa9Xj6Qomdkd=!GfjfI%4kZ+#*Bp(jbe^M0{6J3 zO3IKLr%AiL^hZ8kWo2B2RG0 z7o8SdIA>VP_S>=vqmH`OAugh*ye}>+LR|>UOa7%m0<3U^wRrIde>(|PcGM!Nk&(aC zwBgldMG1!|!6+zc@78$}-Rk7!Vw7yzx>H`GYbM}GbECv=d?9W}h_z3!gk&*+>byT^ZXDkKqfz}I*R$&-`uO|x%`^BJG0sA8~M z#7h@8%lx(2wW-&NtECUW6mFIgB|Hv#Tt6MGHG1LKhI_-ojr06(n&m>j2PjRm=xXD`?r6gisTL#5{=iSFsN>>$vU$}W3)+p2*JWroWh};TD?wX3vNuDB^Tb3o`BDs({nf_>S6@sYjjQ=T*2}MD_Wqg z>|+1ftE`aiweUga{lg9;-T1lLVYhXcW;a zeOHh2SE(Z!_j{(I6IQUh>qc6ap;<2}89gA?6)dvwufs~py8r#3g+0yjc)#-uG6rT0 zkiaOJt#!j#HvD4JGj9_Xe;4S>PnX0Z1p)OL(v;;9)6&GF+xv=P0@jp;S^VMd;Kv7y z+3D#~9apcA$I}kRr?%@gCWZdDvpR9%l77Q|hCJDj%@zwb)n3_DV^)g_542Glqb0(4 zE2Flq#eGt-8K9>e0InIc02*8JY(NX%%9xMK{ePpH-c@;*BZ>_F(O6S_+BwoK)3{Ek zZUMc(KRN*NbkOTaE~Z#(m0p5oQG?w|co}CKCldDGS0BrZsghfN=faeF>ufp4^!wQf z=o%=AzoK+XcphKj)akN)D#6YAdU|31#Wv;|=lGOBo2Z>(SOB4oB)^0woP=~#y5JlI zSWmGV!3~uUgPUBiwRHJZu c&0dLmD&lOQM+AYl3%z?MB_=OgC9LoNKM#=5NdN!< literal 26971 zcmXtf1y~f{+cpx?jdVA-gmibabVzp!NOyNPE+r`vOM`-R=h7h{B@I&24d3|tzu(0L z3>&kJxCRh4LEs`93d)5%~4mLRnr0?&aTC zVMkdy@Cd4lg1$Q(96H{=?^iRcL65+L$R3I+vdG(rWa#K+ta6=&=qL!}$UYnP@m+%pYQXw25*bFKn1govPw_#iUlsCl@9yN=; zBxSe%oh!Mps=MNflRkvaup@yd@Z-ai>#0$q<5GQIHzVhs@1x$#*hY#>XpxW;TlK|H()mT#`5yac zDscAp%9dH?@P$!R$I&Ly!NWHgxw5~hP>^Lk_x5IGK!G+lM?12@?)E@_t42puC;C$U z52`gjTk|IaFs=p=T^t@Y9m=P%ueAT(^IW4k;7Sh02hEnW2=>lFbji6dT7N9Ecsd=e zw1oSgn)J$M8YO{7%3G6a4h53JL9h@#SI~c-=9b{5{l*d2Q1663%QKuS>*k9~j^EQ{ zLiEC8yz{G)oh}=EK80}ej)!O1&Mm@2NTn!ch)2b7d9dLq&gS1}0Yh}44TAMFkYn@} z>+!Gg`fhlg+b{(0s#<#P&#+EJDM~(^Shw_S}!w z7a|F>dd&QAMg%;5TCnuIzw}d&|H2Yo<0?=bVP+_Q>Gv+(($NR*4JsS)W*EBa#`M=p zy{9>}2{G??t&|e8JXZRHu2zMbhX1BYGu6_IH4Y;<@Ugc2W_7`wZvsg|tI&-69xli2 z?>gGxc5uN_ATs5b$HwdpP(k4O_kfE-(=cg){64{q^95@~i-k3(mA^}0Yq+`D;s!*P zjFL8rBrWE7wPkzla-yL2!wpi_za{=#MD4xc0nYQRME7Y9er4Ux==s-g}!iiarsd5X_6pH<3JMq2cThWCA4NdFeW)!=xauz>i&1D)b>}vWmSNDs|lHKk$+c_=A~NT#mT1h#PpY=A6(j=t5e7* zGH7@I(W_eP5R2Hvye;SuoA2~+)?a|_rBwsqsdxdlkg1RwyNHv|{Nle!N&H7sxR)&K` z{;}UldE32s!1Z)+x-5ocw$F)ebcBABWd{}6f5%^YFFL2penk2p@r(97vDuz_99i_> za3uHk_lgwNYm5T_�hAPDpEp$C%;$6Gnn_$Xd8tN8 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 literal 0 HcmV?d00001 diff --git a/resource/dark_btn_collapse_down.png b/resource/dark_btn_collapse_down.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c37b132fe04e3d8b3a1f31e3aed881d56fd2ee GIT binary patch literal 4267 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 Y5YpvZNSgMn1#3X=+>OqToZ^Q60c>OXBme*a literal 0 HcmV?d00001 diff --git a/resource/dark_btn_collapse_hover.png b/resource/dark_btn_collapse_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..329f498e71106b5b3916ae474913f5369e46719e GIT binary patch literal 4266 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 literal 0 HcmV?d00001 diff --git a/resource/dark_btn_expand_down.png b/resource/dark_btn_expand_down.png new file mode 100644 index 0000000000000000000000000000000000000000..2a93caeaf167e5237dc5dc603998d733e4bc7d27 GIT binary patch literal 4259 zcmeHKeQXow8NY}@f(c=5mI5hDE>1g|r04ta**@RwxQQLG38tRo&`_x0eD^xJIp;HX zm)J=*8bZ5?W_%PxS|ZBFw5llWvWm2*1WHL8#?oos2cja|T0tmkLs6Nwj^LwA?_df38xRCp?DKkp@V-R9vKGMK@4tUw4ZIDs zhU&B+mq6o+91$A8F@$eeDlS^&%dlHI(WIc ze$#quU&Yb4HfK5(5LCQ$U-Z3-fdggMynC}HCEGC^Pwt8qn&!P;_4rWlzPoq&3V(%^ z`D^><4_(|PSxVc^{%HQOy!_n7Z?*;giB_6_o=LZ@|4r??cNcD4QZ|^A9o}%^t5Zuq z`0()OuBR@S1OwlD*NW`g-`;KbLBYwKwXfu_G{3<0?|rh3%_xko-=OZ^Tvvx689PL` zJK%G>Cz63F9QyIIPVYO9tT?~9=EWC7o}1{%-eXNCI-g;>O79z}6w6+_u|*kON|O(i zn09wW2L|?>@7dAW*PGMZfqs!OVq!}Ay*tOM4OrO0e0Je<+n&>j_CNHPFWsz0dLqk* zL&1l?^Vs0IvW~2xpA`*05V*UEy!*FG&MKl|bNmac!Da$RT-Qp>O8?#x|ldw8U2 z%0;A(wE9e8D%S_^L?Y$RQxDB1&;(7N_`NxmtEZX|GCAd})U87eE zoBq9A8TzPa`?Gw({edF;w!gW)_~4ft4tHz&-}W6HJAcv@eq_ti2Ag!}&gGMTS=m0e z{Ea{Lf3@pA;*PJi@8zmJ?E})4k^Yy5+Rk0iA^!f0>Yse%-PT=sD*MclKicxPU)_kl zcH{Q@!xu*9?R}}YE7rclz2!{haJ1l7&h6W`Zyj9sq-$TE(zj;KtFOSCYZhT`)%n-5 zyeyeGK@I~`Qi{W(LlB268Rz&Y(9kfb7h_K2thQg+TyFA@Gy_@g}7)m5#vUpb9_p=_EZ_>l_d7MUlepZlq zQD9S#Ohll}q>aO9lB6)&W}z|0PDe0~AxPS669g_yPNVY0RE>-AK&OJ_CK2-Rc7ovv zyA=y_w1Ck9Lt%E>!eJJ`Q?w0IGFIy}iboX@RwdUsJu00_fK(Ji0y8hr7)1&MMq7CS zNy21K=c6wS3)6wpa(bmg zf|Li$hIK1|(_|$i%Z*N>9u%s3P7eFwh7vf9^Kcq~qy%MQ35F$!5J|HX&C)~}L9xU% zyex>3mj8v;w-4$_FS=J$;ruNrQ+iL;fUW7b^lPJ-+Ds^#+7>Lwr&Cb5W+0^Egk0$% zzJZI?1K2;t3wFXTeoZkDz$Wk@3@}TWi(oWGGgz3gSumaq+ilQhCkfk3c2$mO2~GhO z^-xEs6)ez{R_H_HOI0!xpJ)L3IzY)Vg2ARFBaQfYvbf$cCbD(l|D}f`1(?=ipkLYs zTNmtv_+%>_*Gq3Y-{5C_9lpUCAobiNv(k4?t~t48rNFGfbJaB`*Q^wn6?m??{%>*_ zrVdje2LAyi;87{uS+ocqvlfJ_S9_2#{d@Gym-a);!nk*XiXe+}^(zDEKC}!PGc}*T zDswc;kiD!Vdi6vBGzER0iqJ#9|J^<^=NyqWk1YJ@k<&F@$6qfyF?hc>ku~&5?AK^* z9{IG7x`vM4EKY7;v)Aw~Aj=%36 literal 0 HcmV?d00001 diff --git a/resource/dark_btn_expand_focus.png b/resource/dark_btn_expand_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a5e97b06cf70d30d7fb75dd55878e0ab789c50 GIT binary patch literal 4259 zcmeHKeQXow89$03!3kl&Tu6q(#X;pGJ>Q4V@%d^eP3#n##Hkw$4JBJR-@TWdlJhy| zbL=Er76PpVG^K!m5m7$+p;l>|R!fJM$BD%!I5?0jyO zrbz35v30(?=i~Q2&+mEOM}D{X%U8}eWEl_yneFwsE8u;Oex=TYzxTbrdlkH$Y7SIt z6fN1}Z=9DdtLcu*;dn>gV)OJrl|0hdz4M3LJ&RvK@_cKK z&FJgzkgY3P-u&&1!^W)nv)^d({|ha)Je@+fto`$vcYc_)eoo%$jP&5Tvp*hP@X^%+ z-xO}Xw7kN9&pY`@$F83{V55Bg`_LK;Hrny;@tw--UCZIWCr zzt`m&$p+@I|93l_p11E`bf$XsbI%3bU!j9f9*+KT+g4`Jio1J@rM%a!ZBU06(BzWk z<|o?gdV9B@>Dsidr#qv&9lbSe(9A49=Gk(m)PMyY%=NR!TecsMwO#14T>PpO=@K(9 z2P*FU<-?~>=C!BhJf3rUiFj@3!{Y1%pZqPm;LWRNn)ZBqwD4?O1(i84f6M$b+r5L) z!F|5cFHStTh+E^$DOh@d__F=<_Nu+VZvCXHp>kl~+}wjtHJ)F;|6=o|==Hwpg=XoTy}N&r%dpLpJAE#d^}^wdw1!8l6=i}{IP~%2 z==Ygw-=|$0cktQ2^5@uFzb?G>(aY-&bZWa!c@Nz=bEGhM|Aqy%Hu?7LOGiFf+IA=N z_4khb*l{;;+uPjpV#)TlUU^{f*o%EFCqK&|{_$+-W1o6jJByE|pE&rg&A9R7_2_HY zZoYr{?9lWlpYPriYTM-6aH9BfUG|NPn>TOX*jN7h!ktF7XVt1#UxH27D8c5c^p&x^ zBAYou2?BFm4#TcP5JzD=%<*+VLxZ433OP+Tj=yC>CBbQW*yCJk2Ut-CQ2v zo9lSHU@9yyIN~e>kb%abak)MeVdG9y0+)r)x)?X12@|c(X{z-3QJ10uls4050xOA2 zjg+atfI3t`WGmbc3`4*-r>R!c!Yq!*Vli{fVph}|oV45RI6>hQg+U7}(iGCTI2MZJ z>JUi`H;C}66xJjqgzA`FP>E_zlL_k4k@)1W&o>GmiVU*=`M~2`7$?mHF3b3MkBC;% z2tkGe`bm#S0Paz|0z{Ok%7ckevC(;pk9Ml6DnnvKNOuiKp8NrItBoo9KO0-}U&5#sn6M|gOG7iccifCMj2Ral4H%kzQvC-Bb zU_=c1@fZz68e?o6k5K}!)3k-M2*5fH;z3n{UCGstk4lFUbSNuHkThk(EQ}yPsC)tA z2-=Pb9BJceGH4+!AOR)t>;sA_bFiF}%+&xq9I8nubi&ypzt?G^%*2?)U(abGbbxz6 z3JFRqGNuYhGFYu~I-jJ?N;4Fb&oKFvg|^URMr(l@fxW1sl7!ikpU~)qVPQIuT2Aj& z2#}D&Y*?2HI89Llic;@1=|Q2o=cw8THoSV}C1SKddOE4@+1W1~tXqL9+5fn>| zvsVO3Z2Di;`u0H`$)bCt2wcA@AxiG4)u18ymVB+35}OG{6WfC2_+$zZt`P`{I3ZS2 z#n*D78UW|VaKnzsrJra9t4&};k!LW9*ZWDN?3kT^Wds7l2&6SgS%v>Vk0_!R<5W;o z19^m8!3Irmg)SQ|)$)na#A<Q(z$;j6sBli zUrEYPsv&(LF=uPmRVaGM>n;i``|DqJ_GX+UQj627yQ|NaAEz;MbEd5Lch`qX`2-qm{LyU)*^um1d*Z#ORiVp=N_t@6x8 SJB&RL9PyTvySs}wwEr8w)$!f{ literal 0 HcmV?d00001 diff --git a/resource/dark_btn_expand_hover.png b/resource/dark_btn_expand_hover.png new file mode 100644 index 0000000000000000000000000000000000000000..4c7f6db2c33e6ede1c3b1baf19fa71100c033797 GIT binary patch literal 4259 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 literal 0 HcmV?d00001 diff --git a/resource/dark_selected_yes.png b/resource/dark_selected_yes.png new file mode 100644 index 0000000000000000000000000000000000000000..0cdc4916eae2af59ff398a07f5ea5d5596969ee2 GIT binary patch literal 4270 zcmeHKe^3GL=v5ZkQp5OV6C+I1I_5ves>S>m}aKK zO!FUiv$wnN``+ih_j&Jq=f2y6t5?jnW>_s2%WS{TTMF)Tj4L$-{QmUZo|WL%S05_Z zOPLrHQ58|D5g@%TB0xf15-pba1v$7O{aGmO&eew+epofDZK#7i;`m}{q~h?;h88zs zo^1nXw_HS?Ny+i=a!J29;9b@kdb*0txX@nqs(WGHuZKT*z6=V!_`BNA25-*Ee>3HY zjGkxkfxhRywS_iqX?)~ckLyvGJiKtNgC(+#6?Q9qrO}?v%#DAgzn7YgG~V2KW@AIU z@X_eGwB6h3mgS-?&(iwatqU`XGl>+j@Y72vp8Wgge{=NU%*%5I>YgOztLxh=mKiOQ z#}o8>JmU$0G~Q@@+3ovy*`mIUWd{y~yw{<@U2jK^?0CW1_LKR&MbgrDuT`kS50m)f zCAOW-)xEu~eVr{ky1UZ5nxR`W25rtIJ-+RCORNa%a^C1a-q3nH)^xTr_w(x|mQHcO z`B3TO53M_WYH4$7){9xE7mL@1|5}vUKJ@p@{15-uSJ!s)SV4bNDY4+vgWDfm<#>EB zI=DAba`nWTMa)`%R{mq{*w@XcTc3LE=bML~+EjjN@7(OS-ptYncZ4IxloxLZ% z&)In>K5}S#ayiU#)N7r@!)%zvFJ-(E@f^#luw&`S$HEj{fDb zrn?K?AL#k_OY^bY{`&62#jQ=f@}!eU*-Vv%h5972oE4MaR-ky!9u?yseiv zK<{1~J$Jr;c;>EyU2Wl}7Ei^AqVv_6Bk7}~qa%A)ZzORSP=A3YAjW4UZf@2}2U^hS%8xSRmpNsw7{%DwNf) z4srF>9L2*0`Bqn)1^}|4Gf-Tv32SuR4V$<$cs9f+44Eo=wHq!E1R;;23J_@{Z5UD< zmud+(-wL@@UZhLC%f}$Vn;Wju^$3lku~^I&%e5(LC5lrNg<=Fs5D3sfw7Rg)#F4O; zZ9pV2yn@E5Qbd=OFl1mdtP<7TFbvkA@%ZFOATR+R*2Y)>e4ueAg5ov|m1Q*9LeqC%IhV4+JMH z3<@eGIbvD?vL|Wkl6a4-NwFC#W;)4%0P_jlN!sJNo60~d5TLyZ7d683d)=_%pXL=# z;%W2IfpHX-M~H~Xi7Y~jB!{qe!hz)3aXZP898O_W5|lrz=}edt3@89@lK>9K*%_zc z%tIUwo)G6Tvf$xNkyM#7cmf=dQA3JScdOBPog?668&wYl^7H z7*!~&1Uv$+K!ciGK{;ckS~5ABSe0PZ0Z@iuP9%vk7#&L%HFk{gY+dMo@!>KRlC~IN zmym(23+#mG#8x=Q7l`%y{EXG%`*Z<8(@v(u?=)T0bWMqYDJf5P*EC&IVqi+j)7|xd zqsw~lFeQY+KcE;mDizLU+rcp_g)Ld(wcItn9UmNg1xW6X_||I{OZvygHKSiS!~@}d zx<62S-*BomEi@+qKfAK0M)ewHUIzs literal 0 HcmV?d00001 diff --git a/resource/tool/dark_bold.png b/resource/tool/dark_bold.png new file mode 100644 index 0000000000000000000000000000000000000000..5f815bedafe8f0fc3b0936f5bf5edf51f33fe336 GIT binary patch literal 4241 zcmeHKdr%a09A7kn@G+REWR%bvnGqs%La0ypF!!#=_g)@|;=9bT)wc{E{HL0jiYw z01ASlfFQw>9_O4P{U43KeKF3`uitK8!mgs~Q|p^??a8g4#NvcU9voV*<6?jB!>jKb zD?PI{PN}S#R`OPSePZJ3>WoF%NoB2Z2eN-PWz>Tk-^}0NG+{>WU#^Wer=2*yDNxI+huH2l$Nsl!LOJ}BH+lX;}#hsKnjTeHuvIyfU@Omn|N z=c9DR?G;XU^{4aPawt3qy!&8>cQmpINas?Y-zv-~85eVeyZ1)-U|(^0qxMABjSz=3%Fi zs23WnRqr3SoO<}z-!7llU%pd;Y^e0_-futm3@o`)5ti00$5RX^d9*Aqxqvq4@xhuy zkmQu0kL8Mhg1SJy=(T9Be6m-Aio8XWYj6+_UpgodGt2!TyF4q0D=*?`UXwB@COODJ z01r@DH0W`AWhQ9Rgm4-7tcr0B8d6b;ESgykCz>w#0ZM5pErHpBVkxPa6oV%Fd4ZX3 zoze~g-z=H}Me#8>9tZ@q0lil8=i@q>rg4JANfLt^m|W&n*dXSW$EXlt3@ea1zvxp$ z$&0F(tV=3UEE)}5M?3uU_#BQ-c(2^f0^|b^vOZj=C2)@i?`|P0wo(Yv?$BK=Fx+L@5Jq)-4T088EQEkj8)=FRQK#wi$>j_;U!Mwnb0F^*at71;Mo<#4%8M&S)lS%w-Ztj3QJB z!Dzw&aPdYLWiZe>x*NpPei2qB>+bHA3dKVx+8~f5$r~{PZ`Na!U?wq|Wz868qDdWZ z;wheILr^@&Op*K^7N%45u=xP@dGkXHD&b73({9m_TB1whbhC;84PXz5US0~wT}wHl z2V^U(%BRj`piCycNoS-CdRj+zDa{0a8P=kTsw1@eFePeY7#I$umQ^bi0)#AJG)%f5 zu!`i*ktDZ8qdJAEmYvHE*ibyHuvS(95R@Pd3}I#nI)~J&4|-}MK{7-)eTf%^vj5Un z+Xqb!Cp}Y?;r?YIQMjkFL2>vk{OT4%&4i+%wqRH;9D>Z20zTv?#0oEQ1*|t8!1>W$ zupM&oF2!In6O`UWnK3|928`k;8fK8=Ff&DvoSCCpgP`w;E=z(EVErI9AMyyff(07l z3Vp0SRTFyZ2MU0i2S^!4n6WO(j2gT>SX`YL9nmJ^|KcM#q|j}|K)bLEjxIO}@y=1$ z&X+oL?%~m%hkLjKgznp4-)hh;irQBCt{~KK~T_01x3;zKH z;HT1#1(`bdnHA}pnqfuS)Zh9&o2#MZeqZKn89@dPQ_l!wZCyMRMk#iOE$UMA{llZj zK706=b5N9Ox2EQpzvSk{Ut2V^_IevUg2VMBdDeim#MVT*T||TRosl*5qav5?kC+or p42_|9$B99sd3JIZ6F*?kAmr2f_+i%O+7%ECvD>n&+tcPP`3L2t^fLee literal 0 HcmV?d00001 diff --git a/resource/tool/dark_circle.png b/resource/tool/dark_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ea300f48ca23110342c15b45ffc1b3ea138cb1 GIT binary patch literal 4244 zcmeHKe^3?m7GHc7Mrl+8ukzV;Nz-)i?%tofD^~>W1#Wcd3O9w+k?-z)FD!8HUhXd3 zE6<1JXrcAUr$y?}JZ6CGy~f5It4U*m2<(TI+0XGwYT~37Su!P)jJ)se1-#5_<_$CT zAA4tio$ooHbI#|S@0q(>yoGtQlI}>tFl?4P-&ut2$=W&dI&{5jXcVAZU%jtHEdmid z6qfx`HN@3*A&A4M>m8a%ip9d$R+4w){zJ=^^wSHS_H#q4e7isYF74Hs4GNdOK4GA^bl&PT`$Y^(*d*oT zc-=WU;~AkmTK@JAM}E(;IlXI(J07}kV_kC1JKpDxyIgZRwz~Ftk0%9{4KN9S!$rRUDMbf&-aaQ~8J6)SdC{&FPY z-~QXrJ69h$yRx@y(Z+K<$=QwfANh30uHMBNhre*FU*Gw}Pm3=o8=4Y2%1mAN-trOM zzpv5WSZ*Vp8(Lbk^O<>@hg+D+qt|Y^>viLyk-pal_H~(ia&3+W=gdznShF}nFS_%- zpDZ=b<<|Go!p21{uQ4xv##No%@h0Uvy27-25Bu0P&D)$w2JzG7S+}L~2P)fl=6}*~ zq9^m);o^bq?>>}}et1Tu_inb~$IRjWy`?R?)g9S2t(SUV&Fp)$%XqZ%%U>?N9C)n| z8#RYIYDZp~PhED`x3#&N9_bF8`ubqoyMOIEJDa-LUhvpJe#7qUmuJ55&yVeAA3eRQ zb;AdPdpn={BoQxIL!87CAMbK*+5d&(tG|5z!{ABt;FSiftucJ?E%%v+QRmf3sKZJ; z4{(AUFalBLp)nc=q1MB&jLc{V2vtzUc~~w59fk{s-ZbEn=rF9bdMHmQ2UbY=^Cfmje>G15Ynv>*^@L?$$yosNwH}wdOGoeAoB^_N!sJN>&i&WJIN#yiLC|IGD;VlGXqpgI6u>pc*P+@q6x7q}ehJfPZpxi-41wjF7Pzc;8AsicI zX<%mj1Y{{2VWD`DVC}q#pcxAT1jcMPo2_vW4~8Ywm7qF4Dh*0RP$oak&@6IqX6<$q z4fLaE7z<&ByubpAVHvZiLx}>HD~AIBl~W3Ua!7`P<@$m~IG5#hI}9cxbyec62C5$! zpgkZ3MLD8eUGhl*SgZn#Pugy^*zI;JZD(1V#T1KLM_d8J3hG4-m8Ohln{KWZhC}Hf zYJt|N2tb#kY`B~-1gaeN$#S*Bph4i8<;1cFZ730_zzI}{Kq-@zqZp2+d=$meG-tIh zqD&kWr!R|=f8GDn*0v9x5i5GWq#*z6bWv)V0@LM#OZ)WI0X z2rITERDfVPMDt^;VaMgtZ!`nTTPR9k7=pD}X;eX$CxBnH5mv!(vGIU112k?XIaXx9 z8UbOLRgQQ>T%iWlxxyEWm1^N+{YVAW>VPOCD29lm%s`GMOKKBiJlhQNfB4AI72-w= zvWv;k=t7f_oEU{;d}%}H4?M=`_yav4=xHZY;&+;^X}YGwz?77yyK9=RDKRi5<>~JF z-RMfX`Y{EA=pRr7eJTkBmk*%Ntn2uKJSR4){aQQs>_C$1L;0l&hTU+Bb|xI_Zx}(s zMAhwaC7z#oed-NtN@ry&5;@$?EFbf}Q1<7GkKFw1+oR}cTOf+!Jr&sg`Rc6Ufqlmt zZz_9Xp38i2?)>}zRC8)pE0esiDR=9w$0!UtyPq5y?CDEGK$zQA=zJ-=Y~z0ch{OEu literal 0 HcmV?d00001 diff --git a/resource/tool/dark_cut.png b/resource/tool/dark_cut.png new file mode 100644 index 0000000000000000000000000000000000000000..cac865e8db0672388444d7f6eb0536b0d2a18ac3 GIT binary patch literal 4273 zcmeHKdvFuy5kC_^#u*cufFT4ohg?XCIo+L3&#Q#7E!k2*j<5~J1vkFOC;4nkC*Ped z;iM)o80<8>(*_tbFu@ENH*N{VkdS&1bquAUW5Oe300T{MC!~-^nFdna((fccR3bYI`HuRd)EFAD+!Qrp(NnnsIW?gudwFFMm{&zF=Hw^PRuBI{F^`{^ucSUf1%@ z8Mo|>wQ0v%k2gHIWaaI2>-BSQ9QZ*|@|@JXR~p;@E~PWQHIp|!GWm7+O4c{*l`C!k z-q2j9du9C@Y-V}Zw8)GlxvvE#K4`hSW|!~CmenuNk6gQ0S*odc`{VZ!Bx#+Ho9lJw z<__ipGidq6R=cZf;jHfGi}o*_x3+Fd&7ZuxFFT#H_P^{r=)IiMPVZRxuL+)++on#> zKhbgH#wqsViSE)8O-c5Yexzo4%ha;g_a4q^Oe23d>)t25ou_(#van*=&dRUPB(?dT zyyaMVrmv(snz{DVt|>W9KRt6{`_At9wo{kvFTU9M%dh5tA+O$)w7*;*edh5VviD$< zxyf(BcHdo4v*TBD8t=DQD$h=6e)=8VyZtBMxp^>3b>*4t&&`^fwy11=n9O`?-dBbi z#}eb8r%SrbmZO&6T%@b6Z$C~HpIxS3dBD1U{I9n-QndVqCE3%`*u#~rJ6z`*u6AX8 zcE9N6w$n?KGER-F^vx4pDwm$E&lX79c3BUvZcM0IB?Kl=LKTY;km$U`c$ zzqY?)F7d!!zi*#&(@Q4;H$FbL@AM1NzRAQtS{JRq>1x=O^H%a7_IzOOTl3cydsqME zPJ8F(^BQzf8Fn4fY=}CV4_&ffOTYd3o$J({|1==`nxtcYbbsNpK1r>s;UIIn+1;t!_ z6=&tOSqoBZ5gGynfWn}WKy^^2BX(^Jmxj-(7}ugP6{X6qUGDLsxuOJ6gU+BMFlR)l z(`y%`pf-v3(S?q@0SNeJ*H$P>h{o}7IIIg(I#KfDq}6K02|cdYV^9N=R|OR&f(7La z6(Ww|05T^DAw>{_sEWz3Vy$A=YT-IM7+)ad@eIKS=BxZ;2S1uL~QCxES$Yq4I$~Jjt!5M-G=M!I z1bHzm4=)u90Z^ncDxaj;XfT`2MythWHJT{%u+lOh$*>kxRFcq9aZ1#Upodu5H=9I7fFTOwrP5=M^ literal 0 HcmV?d00001 diff --git a/resource/tool/dark_find.png b/resource/tool/dark_find.png new file mode 100644 index 0000000000000000000000000000000000000000..dc93464caf0db09b6c93f68a622f9e8b92221dbb GIT binary patch literal 4368 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 Xwg!$hU(Hwo9Uvap8t1XX%{%`CWeWvA literal 0 HcmV?d00001 diff --git a/resource/tool/dark_no_auto.png b/resource/tool/dark_no_auto.png new file mode 100644 index 0000000000000000000000000000000000000000..89a88aa6b584e39524e743cd2812d4ea6ba0d425 GIT binary patch literal 4289 zcmeHKeNYo;8eh~3O_;}qW-oyPi4tiv3I*|_=Vo^U3)yVgT}b4L ztxi9%H|JfUAL7827OZVg9qpXwK+iGOBE{M(+S+sklyDcY4Z9sEA{%^(AAC#nn9 ztLvBu9G0bk5aeNXYnX@ms1Sgl=ta@DF?s6zq+2&;I;Tuon%>zTs=w6SiJC6#7Z+DV z1Jlk8RA-zMA@gFB_wCON(+dl){Vj?5uIquDy-8c>yo?${=@KGu-l|{UZut1n!+oL0 z+mgDRhQDm^CD;6WMz)Pyly-Ywc3Sq+kAE<~y9Rl4X@C2BRWZZBE7K3}X9wT^=-|;= z-#?e~v(wW~xy~mx53G7Uw5xG{%h|N{BUbi}wz|2!mzx%yn{(k{aq8^3auWn4JT2tp z_&hl|!^waY8f#u~=AL{cz2g`8dmmf6qbjB117Ficw>y3B^X@~wi-rUA?oHp_;Z3WX zIcw#KBUi3;`p=)}C@xAY%1XHfRm^Ifxw-ZI!G+JH;`7pPTV(VRf!aUzD1+d3gk1HfQMo zS>al1IXz1@Eo(eV{q8(ne!2cQR?uBYY}#jkcG}Cobs3D@r)#tBPxb%4taW$pC)>U_ znfdpd`Mq^rk0mVVoKohSZ{POM%$q$2iW~Q+_1P88H#+{1d1`yi)LnMr+Z%_)qpP7o zb9is%ts{%D?>*HmE$&@Uoe;15wY{b5m$ANN>|d>U&-UhS+mn4b>5s3Twe@ZPa%1z8 zAN3zN_M1-<;k?brWhn8vm}}=dpF1zjz4nj(%jW*u+n|%EWC ztR$KkPV)1ns2B!S2SJX^XqaKkc@_5aB|^w)y#DTSBP?)EW0A#+dBZt;sgPSO^ZC`Q z3)t#%*3KC-GYpO>4G2VDW#Fh73@LQfY1DaX@T{3pBdkNza;I^<*9YfFG7pm`(u5)I zs8B^1GYqgp<^uFO*NPzu@a8m@s%n@<(MTj>ikMB3T!P|uyB);{lpqj*K$NW^m5CxD zWr0Q!=Wy`~D+^&&kV3G=$@ry8)oC<>adyuHr-Lg0U1FJK`U%l!JOY9E!vzs(kmocWWaI?B2&Vn;ZTV_pb1WA`8-Y|VTwa_i!aEi z0pI|7KnQVCL>UDa2qK@aGMb*a%|hC2Bw;1(6nLgaL4~}mfLhd8am-}4>Lc31&>$Tk zEu&Q`Akgg~8#+hk8C8-CBq``LY9YXy=g6=ZG!)0EjEhluK#CC-8lz~;UO<>>+(wh; zWf(zYWAG9u1h)P!wAMbbBfjXlf&%8>s+;0HmCski-{P-9L2o7)*4u(+*mw#GQ^j+7 zoPaAn#FjFl5+3XyLj^l*7k;D|I6H2}coGytfHQ+)U~$BbnMuS<*{pm35BPb)HlAIP z0&0Yj`K%J4BhU&IsIC?K@X%5%8IO;Y^4dB8$qp=fY4~GsI zv&8_vxD9MwU?)UJw!$I3v`yzH{0yzbPdEdho}6St`cBF>MBaX)R4!$+I28{ H%Z~p5f}jq3 literal 0 HcmV?d00001 diff --git a/resource/tool/dark_rectangle.png b/resource/tool/dark_rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..4b7178edc6c843f3c7c8e6326d4128a560b2efbe GIT binary patch literal 4226 zcmeHKeQ*@z8Q%z)5X8xd2Be{^$7ox_e&5IL_Kqavj^w}#m*fPZFy_78_b!{{ZZEf+ z+$FV#UgF$wwzIt3!G2>=FX*Uzk8=i>m0oPRTaexFN5;# zMb}*Ijk$+AkG0-gzVVYK%}2Y+*Dm{Y&g#X_E}Hk~`K#jb!znN(LucnEXZ=09YTm$bPZ+~8o>Gd7 z{odl@v20Kd9Y1}+RoYjW*Z){$*TWBPY07Ch<=->t@#J+q<2mRb%swFQ+W4P2zQr%z zy|ASBtxK0q2H)%LuUenEz9?q|YgpKE_omKwM(=OWWxk(x^YVr6lNWwmShMbx+8YBI z`$P9$b8j5Dy1u_Bf6GUGIV-oV9yqu2mHy?Vb&zFCuJ+ULBtD5ck!Cmh% z7Y=T7Yzy0oJzuP7*!A-L?YBDk+B0*uFFiya898z2%E2D4ZKt^X>xb>To&$8LS+%7(o+`~OgIqOFHKQ~Umno3BUS zF2hE-SXbl7TMy7*dRzAG^X%B%8@cq)!~0JEr043L^!3g)Td$P1?q2zN*3n=7)p51$ z!$k|0|OR%APqA_9m&9pK4GeN+>ZE{lmPqGv-)S#Z-tuX9;8`22XW8i%-* zw30O8Nh(dOWkojbjLRXh!o4aDf!C|hWC&Rr_m4Hk>&Y7TR>{T?K^|HOmS$;tkl}2cotp&ZjcPiGO3;8p;G}|Z z?7RSJ0YE~qL5{Fmfkg0(6eI*j;yE_RGJ+jUf>;|@P*;Nb$x#_lGJ@h|-oY|9Kmgf+ zqOo&!1SPYCO$a$S!5Xv&ZB`RXmc&(RJOWTTl?Vt!Di#f!3WIR5$nSMoSdyNQ`0Ifl zLJnvKl&GvGvM{ZlFU1O0zbR=0%1M(6mT%qD{!B zS&^P(ugXfO`F~j(MK4t}w0^TGO3hRyY)HMOUh5Tem~h-23lT`E6g1ETWiw8M zl~PGHAR2~f|429Nm|XdmW^hP$MgSZn?1Do^6{Kl`=O7?pkd`DX3#^Qk>ZfsZO%3S@ z5Qjx!#3SMgHK@rI{=;;sel#_jL=80RfG8tqo=8(>HOQjU$x_CSF_x{9`Y%45rop5w z2Kl9AXzM~dAvL}grujm#ewSCe4&UVxI6kw;wD_H&Ylg0AF)%ITneLjQYg!CU%Xp@{ z{%>?;PaLLT6#WBAprg_wx2-Nk$E@3fYf9YMsPWm`{pwC6nHwvu(lBh^0^^&3?e18F zgqgb6=gGX5H8*!QHh_PP&e9m=br%KrKTFk%u5W&!t*!0DQFNXD+rX()rwU)opj{8W m)B?_J?ybh=wH)11h+(x0aP0uyF82HPU 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 literal 0 HcmV?d00001 diff --git a/resource/tool/dark_triangle.png b/resource/tool/dark_triangle.png new file mode 100644 index 0000000000000000000000000000000000000000..6ba2a772ce505a2a14542d354d92140dd61a0904 GIT binary patch literal 4232 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 literal 0 HcmV?d00001 diff --git a/resource/tool/dark_undo.png b/resource/tool/dark_undo.png new file mode 100644 index 0000000000000000000000000000000000000000..5b7653a35eb2a6ff07cd390fc21fe3b8406aa5b6 GIT binary patch literal 4251 zcmeHKeNYr-7+>sz;~L9hR3@cbkJ1eG_T#=cP6FHLOn6&KO<$G$TVW$4$ZuaYWf6woI zpWpL5@9eG&6y}XLPB9_~GTxW(nG3HIw8L;UJl}NwG6OH|b)^f`xl9a=$`UVx0je&F z0u;mr9zo(=VxaiiHq`J(&&1ou8Si$kDlgwY_2=FzUMdhTB%e#bi*A16;Kg+}u2?g( zxcePn)dqCh%<`m%n-4ZF;UB-UaQopyZx+9`tgdX>q@o$0r+lAQmY!pH)Quns%Y@wAfG;<9ARrh< z(}Szs`E7Tkw%=Q_>8{(B)=sG27kIwQ>rLJCsCR3i%eaMZT=@G{{wZrFrsVC}ar}5k z@W`I_viXVgvnO0as#BUKmT&y%@-53JlQ*XJoak=p=)V1qih1iRFC0jCjlcf1XW@ZU z^V?g~m;TT;A*bQa1BchHZ_mi=IO=}jftJV4Wt>$OuS(c-AJsY|`5@W7wZYL4vSZJm zpHg^ZQg%>>#1vr-!>MkIGJDnT+TMbdoO&QWkfS& zj;H5(X7^LTC%36WRiiYH$6_&a%wm@05Kg*WE}WoniozfQQx-*3CXPjvG>xKMfO_C@CW@100vAPmxQC*8YavPhg8tD% zDTRHC&jpH9BeTF;3nFUTa0-qc^pDoaVLcp<#X%T|5URjg$q`fL`TT)F4^4uQAVzgB zDE0`XD)2*MjaZvDqK7klA<%u0cLaJMb{z~+en0Jz*cxqlK9Ad^%};X@D{!=aOF03- zvWyLLI^fCb1ORhc9WKmC+DS*yL6J5m7)IrbC@K?Sfkp+%%>v{h2;NSy1c})Q2Zvd0 z1dj!Im{&{C;^G`GmbVe?Fp45sfK|zahp$Sb;vkia;GIAt02bbXSviiyoPf7utc|fc z7|Ko(z@}4iEInJ2MFyr*5Sb9bqmht4pb1WA2YhZ5WhRC!fiR=;&;j;<5aFblGBi{w zh@eDeG(Aa&&FXO2>@awX-DY(Sf#v~Ofwicyl7!h}*GII(&@db*Eu&Q`B+%_J8ah`7 zj4H{ck`#8Ev_+ws=ism(HWbIGjE7MHBqb;tO*m=7RZ3ZCD@jvCIzd5Uhwu_7@QeNp zt+fxD*_ZTuL4orx(oKCmRRXH}p86icg5FFhs<#EruzevYOfBH_c_CNd5L>}SLICa` z{RKN<7yhXjSXajgO)@Hd$K)E5Yg7u13OrU_V{(m3fl-0Ss_Q?K%Q*Bg1tRbb zCVG>+@unIzKtHIy)Ib4dZq^d*YMRUDgF(eAQySwYf}LJ{4&+t}8yx?W+vz z4SyBLjrCNv7r%NwHENu;zoGY{0eOGn(TVFnePT{W))iAqAR*%O7JA;uxo_!TwTb*p literal 0 HcmV?d00001 diff --git a/resource/tool/dark_window_keywords.png b/resource/tool/dark_window_keywords.png new file mode 100644 index 0000000000000000000000000000000000000000..e92d62f81cfc16f8dfdbfd119a01ff94b9e7a9a8 GIT binary patch literal 4752 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 delta 243 zcmeyW*upeHvYv^7f${mYhy@G`3~VJqe!&a}K(M!B_b#9aXMsm#F#`j)5C}6~x?A@L zBv|4aQR1ARo12 z*DoKQpq8N7^!V2A)z_jJ7HoBkKhMiulXdxUPQdFIZhN@iR^C0EvcLD-1dfZA%!(h_ zEDuLKmE3aDqIzqy07*z(&!~yIw?FRZuAKb1Lpjai1rC8$8}`R{kHx#&`>}8* zwSw3n*pxIfX^q8%L>XsHOf=KfM$3rO3z}l8A&!mKNTar~QyY_XBGVe_clY=?$xMft z=0Emkf4%Q}pZDJ9z4x8lHdo2Y^wbAaH5yI2qu5>w?{kzhB?(^Velfzp+ldBurCiEH zkU&ThL@z+(jRAmws3>SO(F;D;#q>Tr<+f*gdsD(PynS$Qsri%P*cNy2V#lWCkI-Co zqjhfJp)M^_cUCy?vh9gyj-Rs1R%B#7+t%{Y`zPOTeLQtRdc&r)UtJGhgC@BS=ttNm|>8b6L5K3v|o zt*u`7%zFc9(ok@5Ao6nZ#hQP$y!ZU+s>;EEtk0!2i-yuK?5LV|PX8LrCgCTd&E|60 zY-8EL96EpeoVB={g;;I*Q|Y^_RE2U{lWv+ z?dt}vRm6IiG=I`Jr?7R^zy}>K#FpmvpSNz>)brENmVO#;Y)|N}CVLm%`$yu^!B%st z$As?wVtH`q^9!CH?zGgNnbkJ;ZQaq^@4S8WV6VP!g~_@mXJO{*^-Ckfl7|+5W(eA! zG`^b^(k)O3Liw8IVxi9bU z!(~@@oGMS4-~XLj*F0+T&Aj1D2dX-E$sL8ku3NF+u$fb5dV*(Vb7kT_NL>$p^uO3IrXF7YqRms_pWZaTD*Bz;h~h@y>!-mZOdPN(A9YQ z#(|z^2a}Q2>(R@aZ~)1$|>=bs?{s4$oo03w%&D480OlT&{FD zUE>xC1s>5CP^}=@Q#55!m>_FPY|4t7&g4L#`8e(r?XlcdWvJzJ(sqffQ^IrDty;xD z%}bof)9NE-U<8X`Hlh@%$58{x!6%*}P=PhE3`gMx6QCwRIs9Rn@pC|dg5Ww4;s66_ zG;<_}0+KSJ27xf6jDe(30_Ti+04Rns8z(`m35l>P8Smt%6eu1-2_`~s(E|ph3?>0J z@J1HK#qy|;6etV81q;U#DiqJrE2NN*f#no^j0a!=zeinA2&W5N4y%^b;S&;u`IVQ82R zq?S=S6#}Som%-9(jKv0}C(zu1jDL1L7jTCLL zEWt?{pQJDGqOkFQX)EJ{&v7;o>QTnR>vh zaYC&45?90cJpk?>qYXPI7r&ty1iio*%#47tBp^_OnFA<8!dmhI#p4udw&12Xt>frn zNsuE<2o!iAkB}?apek3$W22>dd}=h28lcnxQikFdbb>NUi;X6WDLckkwz=5X_{dci zCT%g$E-r&x7u*T4@vU%_FBt2$d5qTK+jM~-Gft+(?+jftbWMwaX(`Wi*9=|LVqjXz zGu`!nqbqgdV+#1;KcEQwRO-NtdGIqUiCw+Yt{G8&T|N6cpycjAaaCBONxM%u6EwRz zv!O6qb~uZYuczF7|1zRqsI@@RYYuyX+wuplI)7Gwc6Rn1o0!C2%|4s))uQtDSD%C$(#CFOXt*Rs{{XkN9Q4X!6< zn-WddV5N7seQSDO@TATaV{KMdSaB+4>#GMVZ}QdEXHMKxCq`c>Puu@X=Hbl25$&_|0|P_ST=7ppiZj3`#Pz^|13>2g|Nnazil_luj3q&S!3+-1ZlnP@ z)}AhoAr-fh6BrneF$5|YItrai;^iz&NZ|G?O%UMa_w>U5zXTe?;OXk;vd$@?2>`mxDZu~$ diff --git a/resource/tool/grid.png b/resource/tool/grid.png index 441910a7abd6869fa3d33b192fa30f3f96da50f4..9d5626c449ab27506e5be83e7f8a5d465207275f 100644 GIT binary patch literal 4224 zcmeHKd2kbD6yG>NOSD=Qxh%Sd!vi*ZWV4&BO-tK^HkQ=TM%ro_+3bEvw`8+vcH4xi zTwb6vh*lkBsxnh5c!1!Dh*&MwS`QdeL=;63VHC9r=m;uf{dUtMjLtZnk^h>^W_RE5 zd++_;`@YGy!e3ULWu9n85G2c6;x32xOW~EBIST%sARoOQ-ri~oRB7dW0*%F$kQ4!^ zwlD@zkd#6Qk~|>$3oh$KGhhGZfjm<|R$e!KeD>l!-zKueiC-Lfwd2SONY9Jk-W~0n z0^SE(4%C6F=yq@M{2xEPWOmCXzfQ?LwPJm9*wl97`)Bth7oWP?l$bPUd*71FRq$F+=^x9;uUsrQa0ugW?7&B6BWgE!8so%=-HZ@Wy-g(e(#*X%l0 z+0`+9*>|1Uh0AZ+^-1#+T{CjK_q*=Av;D!7Gk#VVuQavIr#h~^>_hV4=H=}2FoQk$ zOJ4oz$EMzUro~aWXXJ{jw_A6deP{d8%^kMRS&ZxEoM~fA=gmlv)33bYBwg>GV}E~K z+&aBwo8$R?+=4^RZxVq$bE%s3&ih6@zRGR3h@Z?UxMFPZ<+^pNOZG1MvNQktGZjZ4 zdG8j}Ns} zX~du2rq))^$|XDH!$)3geeaHrV;2*r)|K9Ov}Dnm!Y!GvKm8GVZ0XmxtzEpkXJh+A zdo$3|dDtN&XU5r~$!$e!)vQ+u}Xps^JC~c*!1m;Ofjg%$N zjOND05LfP=)dvCJT$Wl*i*Y!fNF=NYn^lR2ank8@;sk|L6b3CYbzxNFlUP)ptV5(Q z+&~rLQcRPSD5_)fL8U=+Su9YG_U9+Ze7*trsM^N@fQu9_2ddH#7l5Y`M77E35TY>PA8Uw5jB-Q)2N57cQx!%f&k0%V_4x-pbPB?f z95cKi+2>elQfQE@b8^!)Mmgz;K=%RMbFBMoH;kc`&&RnHp+Qg2>vmc6_?)N+lE@j4 zc1pCf6d_^^L$er7utAI`SPHWRgUXWW^xF zqk%|>1PKI(0VN9DEF~`Uu$_|3hXEdoh7E;II9K5Jx-68H7?k)UycU8Ea1BUNQAwzS zs(>Ve3XRwKBw0JnvJNN7P!t7O88n&;;wqd)9hD@kHpbBCjp1N9kXl}!R0v?mVKrP) z9PpYF4=75+WzmyDbVkAs3R#=kwFohw~W%MTdh7iQi$mhUpp-14A+%o~~iKhQz>-jEAS|f1}Ghc$flF z_zx%nk4lHbI|A^SH7ZzI>_&R^@7nhD%}_ErR#L4Z$c2~dmkC+ZG9C&uG_TK-aXfSM z*vZ)!me;_;KZ1GP1p&tg!u**TSr_$skJt!;ApItPSN5!$vMCeknY+hlHGf1*sOAf= aK#*zS@tJo-pLqj1B3@6KdsE^3Wq$)jHtSjd delta 103 zcmZortePO1$i%?FP#?_90i@VUg8YIR{)3=-gmf)XMBmfJF{I*F@{fL&q@*N{O^pqm zjU^6!a&8M^H*VZ`Bs*eHh2h~9^=^Ni8|yu;GBbF-JsD^}wf!bgD}$%2pUXO@geCy$ CwI#X$ diff --git a/resource/tool/save.png b/resource/tool/save.png index 245d716e43e49f0107851444b1ea42d2989eb2d7..13f10ed0f5163acef8dca715606076f090e45731 100644 GIT binary patch literal 4286 zcmeHKeQ*so@AT`v09_8$dKb&3AcjXo z!OsUFF0YJ09L9M+hQ&{XJO$(1@wC0y*Uw2Q$jIx|M_dy%(nKjLqsP zcDykTZm#?$qvGLpZ>^rP?NC$7^8GVYXK!lp&FH)T_4S?e&4g{l*5s=WxZpY=agzI)3of?SohQo6DJq% z-*NVAr|*;f9ZMFaE-J|E!Kx=WPb_ae*!#emN%Z|$H_vzN>+E`XZpFe^DsLQ4dBgwf z%l2i5FD~k6%c;NAo>|!N$l;G0U+Kur>pWq7;)#9Few%w$TJ?O&mKEBz2ge_wyS6o$ z8UjXQ)Ac#kO)ovLrn}i(d35Z$>F;Rv^t|`Zg>7xR_9CP8v8>sX=9TBh=$vWU-|DOF z^9>(N7BxA|yUc(6gsD2y_%7u=x=_39&z7}!zWjT;O3i&dzu?|UzPBn{o1Dk$K5x(e zs=MsMhC>TdW_FIL^vtl-UCZz8+Pb89quf|nz4>Ox&iwbDYSSF8{Pf1n?V(*ISg$U! zrKV@cZ0ZMBZA**e`PKVFXV2|!IrMnj#e1mlTIa33;H=wNxIJy}YyUP~eCmteZeI1z zD_i%ya4Z#{S5BP4Qh(QGU-$PD*3Iq zZ53T zQLTE83eOWcKT~Qi>W4s2R&|9eM;MZf#bTP6P9ul`lD1eZB&8*_S^`-R(#o(5;zU@Q zsX+8$*rCLVd_?AjFs@(%pHL%P)oP^22l5L=-0ng6u++~2;)9HX2uW)wG87_{JtWx? zMIikN{iKKFMMFxKLP@9*S?Gwuuskyvf@25$BQ;_$Q4YtFFbG4)R6|vHN?;j#-SZ<0YQBHCq$bArZnDs#I31ejCb~AQ?tx?i**{y0NKEnwt z&oPNxinf?(t;s?Fj2qpk$OYMgzqG8Q6gg5h$fKFqE00DKAAaItybk@Sv7HpW1;dF21_k(V$?S~1A4 zPli?(+JxlbD(vS=SvtSqr~e#&!3YR?G{}hf9i?lOt`RXXBID8S8l`JQ42;Nlw7Y&b zx>Q3iQ!tGF0maa(QucG@e?+fY<9zdq?U)+-7dGRisli_%NqWS&M8dGUCMe$&Y-95j zButfEZb$0nwDd_2nm*9yrXx|6%U<9$f7nsFJ);f3TX*jZZRxqUSABmVJ)$aK|IAYF zj)DdIX4$?zD6V$A-D1o+b5rx>>J8bmy0p&1@y;=r@xxOk#=8z?9lx`vhdg`abW``I zy^a;eYhR7Q9{NjNV}0x8#vfm+pLT2K`@2AD_xUNlH>1rJC@ki3l-U1PxT5~QHZ=}0 delta 121 zcmdm|*u^+OqKJu^fq@}uuJ|V)#Tnoe;(Fk~0U)!Xfgyb5#{WPTV@Z%-FoVOh8)-m} zzNd?0NX4z>1O~>77cK~}d9tyI3oxcFT_7B^aG|%vlCZT=Oi7J97*DWhpI{JRVAwvF V=fR@iI`KfQ44$rjF6*2UngG-KCUgJ* diff --git a/resource/tool/underline.png b/resource/tool/underline.png index 90d0df2868871c6cf1bab25affe0d9f8b3f98eac..0622dd72cf3c111cdcdaed6739a16642081a557c 100644 GIT binary patch literal 4305 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 Qqd;Ov9TBIh345{VKV(dWjQ{`u delta 346 zcmV-g0j2(xBkBT>8Gix*005AYXf^-<00wkYPE!E?00030iNG(A0003WNklh*O+sxF7VJt|v+W454){5u3zaa8Kv1Z<`gHj|Eo)jkEKzVfEAw#rV>6 svpPun+a07*qoM6N<$f{10G@c;k- diff --git a/resource/tool/window_random_pack.png b/resource/tool/window_random_pack.png index a9731622c2b8da98fb758e03c65fc5b8f7a1a35f..a343215843101c38903cb5a7603c9ec8833e8877 100644 GIT binary patch literal 4669 zcmeHKdsGu=77w@x(#oQ%Vo{eNRBeSxCXY!bfrvn&M2SX-&-$9oOkf}{l7U22P^c8O zK2Zw_6_2o`Dz0dKRZ&<##7EJsRY4K!<1DtKwRRD!mHj3l;@O_F$8)y-kz^j<{qFsJ z_x|p^-^sU1J9W}PZ+~wNhci$et&9avU-t6q5AFd^I&tu*O4H3|VsQs#wOI_bk%E}T zRtln=w1LBMHkq^$J~fcni6^UXUO&?zNL)b2TqJFZbiAcg`MaiAXzI{`ZN)8m>;- zu&}00Mb_SrXw1sX9u!veX*ohQKMZ;>bXF^Nv9(k&BCDnS0d=sg@RD-OZsP%g-T%+G zQn}Xh$hF(o&JXcx*k}ywY!|zQOB3hRWO>vb;&9wPrlX>?>Zqt!!GI77mTgo-S5FvO zyD+X~#<-{dpe!X}k!WXWpPer=O?nLKaauO1rzO+)-9RUNu@t4{x2RqdQvp0gr+ zUvQHB3Wm%tuIU`Ta+u(+BcI-BuBdAcoscjyKe7G1+it^q_m%U`-`aD$+Ee~vUKUIG_B8K0cDW%SC90xa>O z$Etv1yyGuUAG^E1QdB)rqL?;v%&;l*LmYzO5#t_CGiCPmdTnO#fA4abEPd={Kswf9Qz2yQzMLTTq>QqBc;L{!@5I zbJ?7NZA@-ta?#V;!{Mh_RPrt+UTc3^ZaOlR(Xbo#c)a<3CRE=ljL`2M4!j0}gTR5JdR4P{;xT?50 z>cPXd7E#;Fbk43E+t>e4- zPsP(_1^3bMQ(TB972H{<2GLlfs02DX%|^wgP1O-;Nra5#hL86SbIJjLiDGcbX)>Da za;Jjp!j*$}R?O!@E)^z8!JVzqLQxhQ1&MiL9s;YJbgGa$-Wv+Dkp_9Ja$+|G7%8|3 z3}cn^`3{GJ=MeEMws^ikCX?|IAzvtjfd*_}Y-VsLY_&qrBY@ls5b;j^w?WdY(`f&B*CYQlnJQX!K#8cmYk&4XnQPJ3gT&#)nx_9enXR? z4X??1!#8%u6;5wQfO!w@8``g8cPRrcjYh7t5GkyCYNdk9t}iDo1Wn3aub5PX6BLQU zQX!7QVi7^Yn3zIfR3OshdXWghrGj2iYO|fe%>>0l0dO7-a4->yp(KjHxEK+^VzFKV zV*)(_V-ktMfQn=?Auj6$G0jGUs>F@Gy<(wA03}5zDJG%xFd-DmU@<8|VT=$8U@;;= z5sE@F1JVUW67q=_n+XT$q)m7{#kZQ{U2Cv}%OkXE1y{&JUQ4t_oG}0c&;zuYv^eaq zr*yQ5ieqq=Pk|H_OEIxPD3W2AR4RR~G?TK~K`pYV0)!`$xMtYI$U!)OTAZy^0N|2? zXyj2g3TG@foyB5Qa9O7y*0N_>0~(6N8C;1o6aYnps2suM0z`)h%{Ubl!dH5rjfS|rb-iqHoy87sPD+b<5xv#qV=z1##-b%Tzy8dr; zdA~kPQD*QD$N`Q@I|gox0LQHU`YDr?oKE&zRPjYFkPNU!&#`kjKGp2yR%a^^ifvUWZKU|>QS{kYglpCE&YI;opFJ!MMT>e|Itxf5(QgRwLcTKV>e{Q z6$`c}{k!nyqvtmteg7D(Q@vMUVEy2=yH`z5y0}-o z@%{ZCF)=TU{p1{Y@M*CowqL*zF?Rj9VS6wn<6J*nzV}Mgov{k99ka^^!P~=sG?|<8 zJtypS|F}hci5vK0+c&?wTQIyMrs2MOeD=vr%S_V+?#%tdsbvSxNsMP}R}-RVx8Hdh zFr@XS-`HipA)(bmeoJ1=z1=x~s~dHBa!NXX^Qi6C()um$;66Wu=OkvvqLmf#s__@9 z)^2o$7A=spHtljhcP;zEmnVIGJ&Yz?4mk;XIlreh4(NeDG=2TAQg+1%97~A^~TD@qTsG&UQIF@#%;gHTtR$9cI zxw-uDzk&)vKOf_N>hAf04xT-|ykeze5j z_-Tx!;g>x!VdIIhm9ofj`RyUYV``9h*HkHu_T|T`Z)A*u8UunF1FnB1EiT)3Z{fyZ a=r@ngOr`jU5V8YQ0!OWys@xa3DDyuGCd#+~ delta 566 zcmV-60?GZoB*X-e8Gix*00HNgSfBs^00wkYPE!E?00030iNG(A00009a7bBm000id z000id0mpBsWB>pF33NqRbVF}#ZDnqB004<9jRpV!0nbT9K~#90m62;p<3JRK^9QV* z{=RdS67@D1pJmr6&>@LdwLT4u^$DykSSbq>oyjq0%XP?h*&H>7$`RICg zLXJme|Ap+6ZvD~@DJ%rV#Sp)?DyB1bc?UqL=*DE{4g8seAH>oK{sExf1zaw5drREd zlXJJNfPT2k_V?)M8cER#7e}e@D3z#ObNC{ZqEr@OE1(_a*ulYiO{=SSb@Aa@kpTeD zdc{D7UN5Z~wco8kxge~LM$G@~6@UZZ1G~8P4&d$a2lufcpuDHRZvX%Q07*qoM6N<$ Eg3`VLNdN!< diff --git a/resource/tool/window_statistics.png b/resource/tool/window_statistics.png index 8e38f53830e0fe87d48170dfda2c8b6e8d22fe4d..c737417c7e795be512c6fbceadc3a21a1d068115 100644 GIT binary patch literal 4555 zcmeHKeN+=y79XUFU{$mVYH*1Gu@)zpnS75#KoU*F&?pF4wRJKx34{3}8Azb6Un>Y} zRgjfcil?+dd#be+w&;plP)e~?SG#CcEQ@XN)Q{pv-4zup`z9d5Y0uf?IotopIg^>W z?{|Oi-rv3Nop}X@g!!WbrUXC`G+L)sF9!EO?ix7){DV* z(0n%ALGx)3V}c-0tJSbeUZE>mQ zcbNy5|GMZtpM0;#PMkZgtr<1*#kx+58<0cU zAB$Al#+Z<%HxjFsys{xHFyn+_cdJGdQuSxeenV@(K78l$N5l0~woeG2f2{V(m1g7l zV@*p_{8C~AA43_zWfN9Ze%>=ZHwgVhNY@W-N1NMb$D}3iO22=~XOC&}b@lR7S5ulA zA~#%X44j+4;MBR|T}`v1nlGqUuRgl@?yTFcwOf6vR$>h^#-Bmk_UFs<%`$lRy*U{> zcTCTHP^L&fJG>zDknr&1FAjC=ZxA=mlc`<}i3o~cG0Tlc@?N^+aKYA>!wlFlY$%Rf-&y--r94iHf17R62sGJcv~xl`M+=G(^T8xImYwtu7d1$>552~wnbMDK{B(->`zlTOS@NFsAqkxEJsJtrW_g98F9 z%@TZ%)naqu9+kk$i-Tv*EE4d&5O$SHkg7NE06)q}nefHx zd3_Y%O(jTUSqCl>x!rD|TP(CY%_3B(REiKxgkdm1z^-f?OL$4eJTJwL>|H+LWPLPY84IiaIu;!K++e`Z+f_r zz#`V(`8vI!--DCD%vc>> zFCg|HB+Hndi8UxTZp53;z(9a|Kkp#))7-safYR%6wVll5!qcf$0&aesvXcyjdmp7V ziWyNU0?Umg0!tJa2`exu2}=pFQHCiMGNoKGfJ$d`v4oAJIVwOdWB`v$L84-#TnS5+ zs2G-DCpsYGFkm_T4c zAx2?^(TFKgsS$*Oc&R87pJ#Vk2~bYPN|udG-(M!GfX)mQWKc4M-78iX#dfMUoH{mnd;e z8i`;yG5~L<7*qEDLUYT9AJtoQE#m_7XM0V(Ybue>=zZ&bwJ_er#OHgL1x}E?DY%F% zn)1d8xO#`kG{R=4!T!6=+beR{WRyN;PvZ-knBsbpVpVhyorUnLyN+tccq&o@N^*`jsA0 zUci7Y2Ke>bz}5wJLQ(%#*ryk_>HLnrzB>GlGXUzLNuEpJA-RU+dM*W?3p~_aLvlTr z0?!2=>aPErTmjDxQ?w0y0lC3Z>GfNl@!*&>!Wcha4fQ}>(DLsxUdRR(e}{Id3xYH}{asQ%NQ;a{mIht#jU+ucTtDOCP^=UBz*Lwh{;9#OY$M8#mx%@%R^-`>pL zG|AlVDp>p0r7^8_1h1-aq3NHkK@Epf+H9~)N?oHYiEgHj2B$F zPA>2dN*p)oFQp&7lss+Mq-lxN%`k1m_*5^zIg3=SR`_ zFJHUKo|W5V#{-L(l?t8Gix*005AYXf^-<00wkYPE!E?0RI60H&`2e0004sNklqBDV^ulXS63;R~co8?Y3$v-1&>HV{ai2e3?+1VYF=2v%P2 zJ+t#a-%9>~isGJS&p9x^`M%kiE;GwRR)6jP@YA_Rh!uC7!G9JX-fr9lu*8e;V~dC^ z=K1;SEw|ss_??KX*xX9mu2o_J##D>|yhOC9C2y7Dqm* zew)I}9RQs>_T>*0n#8VNmPR?bX$h%1v-160F)dG?PD$WrkY=eq>WuUTz|sJ&MGgCc zlQoC~MK3Qz%zt9<^o@#%s8(gxJ}S=vs9aQw$aEG}k_30vDhY~L8?Vi=OhZ3@dDjPB zfZg%VNuXu8eB6ur w`{mt4uO!kft)%DL_!RXz3de+bbPpZx-#=}jKcustom = false; auto_replaces.push_back(ar); } - } + } + // make sure things aren't in a problematic state + for (auto it = cardlist_columns.begin(); it != cardlist_columns.end(); ++it) { + if (it->second.width < 20) it->second.width = 20; + } + if (images_export_filename.Trim().empty()) images_export_filename = _("{card.name}.png"); } IMPLEMENT_REFLECTION_NO_SCRIPT(GameSettings) { @@ -161,6 +166,14 @@ IMPLEMENT_REFLECTION_ENUM(CutterLinesType) { VALUE_N("none", CUTTER_NONE); } +// ----------------------------------------------------------------------------- : Dark mode settings + +IMPLEMENT_REFLECTION_ENUM(DarkModeType) { + VALUE_N("yes", DARKMODE_YES); + VALUE_N("system", DARKMODE_SYSTEM); + VALUE_N("no", DARKMODE_NO); +} + // ----------------------------------------------------------------------------- : Settings Settings settings; @@ -177,6 +190,7 @@ Settings::Settings() , symbol_grid_snap (false) , print_spacing (0.33) , print_cutter_lines (CUTTER_ALL) + , dark_mode_type (DARKMODE_SYSTEM) , internal_scale (1.0) , internal_image_extension(true) #if USE_OLD_STYLE_UPDATE_CHECKER @@ -249,6 +263,20 @@ String Settings::settingsFile() { return user_settings_dir() + _("mse.config"); } +bool Settings::darkMode() { + return wxSystemSettings::GetAppearance().IsDark(); +} + +String Settings::darkModePrefix() { + if (darkMode()) return _("dark_"); + return _(""); +} + +Color Settings::darkModeColor() { + if (darkMode()) return wxColor(15,8,0); + return wxColor(240,247,255); +} + IMPLEMENT_REFLECTION_NO_SCRIPT(Settings) { REFLECT(locale); REFLECT(recent_sets); @@ -267,6 +295,7 @@ IMPLEMENT_REFLECTION_NO_SCRIPT(Settings) { REFLECT(default_game); REFLECT(print_spacing); REFLECT(print_cutter_lines); + REFLECT(dark_mode_type); REFLECT(apprentice_location); REFLECT(internal_scale); REFLECT(internal_image_extension); @@ -305,8 +334,13 @@ void Settings::read() { wxFileInputStream file(filename); if (!file.Ok()) return; // failure is not an error Reader reader(file, nullptr, filename); - reader.handle_greedy(*this); - if (locale.Trim().empty()) locale = _("en"); + reader.handle_greedy(*this); + // make sure things aren't in a problematic state + if (locale.Trim().empty()) locale = _("en"); + if (symbol_grid_size < 30) symbol_grid_size = 30; + if (internal_scale < 1.0) internal_scale = 1.0; + if (default_stylesheet_settings.card_zoom < 0.5) default_stylesheet_settings.card_zoom = 1.0; + if (default_stylesheet_settings.export_zoom < 0.5) default_stylesheet_settings.export_zoom = 1.0; } } diff --git a/src/data/settings.hpp b/src/data/settings.hpp index 07b4141d..61e57762 100644 --- a/src/data/settings.hpp +++ b/src/data/settings.hpp @@ -120,7 +120,13 @@ enum CutterLinesType , CUTTER_NONE }; - +// ----------------------------------------------------------------------------- : Dark mode settings + +enum DarkModeType +{ DARKMODE_SYSTEM +, DARKMODE_NO +, DARKMODE_YES +}; // ----------------------------------------------------------------------------- : Settings @@ -192,7 +198,17 @@ public: double print_spacing; CutterLinesType print_cutter_lines; - + + // --------------------------------------------------- : Dark Mode + + DarkModeType dark_mode_type; + /// Is the app currently displayed in dark mode? + bool darkMode(); + /// Prefix for resource files depending on dark mode + String darkModePrefix(); + /// Background color for windows depending on dark mode + Color darkModeColor(); + // --------------------------------------------------- : Special game stuff String apprentice_location; diff --git a/src/gui/about_window.cpp b/src/gui/about_window.cpp index 63d418f3..fcbfb1e0 100644 --- a/src/gui/about_window.cpp +++ b/src/gui/about_window.cpp @@ -15,8 +15,8 @@ // ----------------------------------------------------------------------------- : About window AboutWindow::AboutWindow(Window* parent) - : wxDialog(parent, wxID_ANY, _TITLE_("about"), wxDefaultPosition, wxSize(510,460), wxCLIP_CHILDREN | wxDEFAULT_DIALOG_STYLE | wxTAB_TRAVERSAL) - , logo(load_resource_image(_("about"))) + : wxDialog(parent, wxID_ANY, _TITLE_("about"), wxDefaultPosition, wxSize(510,340), wxCLIP_CHILDREN | wxDEFAULT_DIALOG_STYLE | wxTAB_TRAVERSAL) + , logo(load_resource_image(settings.darkModePrefix() + _("about"))) { // init controls wxControl* ok_button = new HoverButton(this, wxID_OK, _("btn_ok")); @@ -47,7 +47,7 @@ void AboutWindow::draw(DC& dc) { wxSize ws = GetClientSize(); // draw background dc.SetPen (*wxTRANSPARENT_PEN); - dc.SetBrush(wxColor(240,247,255)); + dc.SetBrush(settings.darkModeColor()); dc.DrawRectangle(0, 0, ws.GetWidth(), ws.GetHeight()); // draw logo dc.DrawBitmap(logo, (ws.GetWidth() - logo.GetWidth()) / 2, 5); diff --git a/src/gui/about_window.hpp b/src/gui/about_window.hpp index 68da6b02..a3e1ccb3 100644 --- a/src/gui/about_window.hpp +++ b/src/gui/about_window.hpp @@ -9,6 +9,7 @@ // ----------------------------------------------------------------------------- : Includes #include +#include // ----------------------------------------------------------------------------- : About window @@ -79,7 +80,7 @@ public: /** name+"_normal", name+"_hover", name+"_focus", name+"_down" * are the resource names of the images used. */ - HoverButton(Window* parent, int id, const String& name, const Color& background = Color(240,247,255), bool accepts_focus = true); + HoverButton(Window* parent, int id, const String& name, const Color& background = settings.darkModeColor(), bool accepts_focus = true); /// Load different bitmaps for this button void loadBitmaps(const String& name); diff --git a/src/gui/control/card_editor.cpp b/src/gui/control/card_editor.cpp index 930827b4..20c2e977 100644 --- a/src/gui/control/card_editor.cpp +++ b/src/gui/control/card_editor.cpp @@ -487,7 +487,7 @@ void DataEditor::onChar(wxKeyEvent& ev) { void DataEditor::onContextMenu(wxContextMenuEvent& ev) { if (current_editor) { wxMenu m; - add_menu_item_tr(&m, ID_EDIT_CUT, "cut", "cut"); + add_menu_item_tr(&m, ID_EDIT_CUT, settings.darkModePrefix() + "cut", "cut"); add_menu_item_tr(&m, ID_EDIT_COPY, "copy", "copy"); add_menu_item_tr(&m, ID_EDIT_PASTE, "paste", "paste"); m.Enable(ID_EDIT_CUT, canCut()); diff --git a/src/gui/control/card_list.cpp b/src/gui/control/card_list.cpp index 8c061c4f..d2195c2b 100644 --- a/src/gui/control/card_list.cpp +++ b/src/gui/control/card_list.cpp @@ -456,7 +456,7 @@ void CardListBase::onDrag(wxMouseEvent& ev) { void CardListBase::onContextMenu(wxContextMenuEvent&) { if (allowModify()) { wxMenu m; - add_menu_item_tr(&m, wxID_CUT, "cut", "cut_card"); + add_menu_item_tr(&m, wxID_CUT, settings.darkModePrefix() + "cut", "cut_card"); add_menu_item_tr(&m, wxID_COPY, "copy", "copy_card"); add_menu_item_tr(&m, ID_CARD_AND_LINK_COPY, "card_copy", "copy card and links"); add_menu_item_tr(&m, wxID_PASTE, "paste", "paste_card"); diff --git a/src/gui/control/keyword_list.cpp b/src/gui/control/keyword_list.cpp index 3ebb1c8a..c032b133 100644 --- a/src/gui/control/keyword_list.cpp +++ b/src/gui/control/keyword_list.cpp @@ -242,7 +242,7 @@ wxListItemAttr* KeywordList::OnGetItemAttr(long pos) const { void KeywordList::onContextMenu(wxContextMenuEvent&) { wxMenu m; - add_menu_item_tr(&m, ID_EDIT_CUT, "cut", "cut_keyword"); + add_menu_item_tr(&m, ID_EDIT_CUT, settings.darkModePrefix() + "cut", "cut_keyword"); add_menu_item_tr(&m, ID_EDIT_COPY, "copy", "copy_keyword"); add_menu_item_tr(&m, ID_EDIT_PASTE, "paste", "paste_keyword"); m.AppendSeparator(); diff --git a/src/gui/control/select_card_list.cpp b/src/gui/control/select_card_list.cpp index 85567967..0b63500c 100644 --- a/src/gui/control/select_card_list.cpp +++ b/src/gui/control/select_card_list.cpp @@ -21,8 +21,8 @@ SelectCardList::SelectCardList(Window* parent, int id, long additional_style) wxImageList* il = new wxImageList(15,15); il->Add(load_resource_image(_("sort_asc")), Color(255,0,255)); il->Add(load_resource_image(_("sort_desc")), Color(255,0,255)); - il->Add(load_resource_image(_("deselected"))); - il->Add(load_resource_image(_("selected"))); + il->Add(load_resource_image(settings.darkModePrefix() + _("deselected"))); + il->Add(load_resource_image(settings.darkModePrefix() + _("selected"))); AssignImageList(il, wxIMAGE_LIST_SMALL); } SelectCardList::~SelectCardList() {} diff --git a/src/gui/preferences_window.cpp b/src/gui/preferences_window.cpp index 55a548ad..348e6ffe 100644 --- a/src/gui/preferences_window.cpp +++ b/src/gui/preferences_window.cpp @@ -39,7 +39,7 @@ public: void store() override; private: - wxComboBox* language; + wxComboBox* language, *dark_mode; wxCheckBox* open_sets_in_new_window; }; @@ -166,6 +166,7 @@ GlobalPreferencesPage::GlobalPreferencesPage(Window* parent) // init controls language = new wxComboBox(this, wxID_ANY, _(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); open_sets_in_new_window = new wxCheckBox(this, wxID_ANY, _BUTTON_("open sets in new window")); + dark_mode = new wxComboBox(this, wxID_ANY, _(""), wxDefaultPosition, wxDefaultSize, 0, nullptr, wxCB_READONLY); // set values vector locales; package_manager.findMatching(_("*.mse-locale"), locales); @@ -178,18 +179,26 @@ GlobalPreferencesPage::GlobalPreferencesPage(Window* parent) } n++; } - open_sets_in_new_window->SetValue(settings.open_sets_in_new_window); + open_sets_in_new_window->SetValue(settings.open_sets_in_new_window); + dark_mode->Append(_LABEL_("dark mode system")); + dark_mode->Append(_LABEL_("dark mode no")); + dark_mode->Append(_LABEL_("dark mode yes")); + dark_mode->SetSelection((int)settings.dark_mode_type); // init sizer wxSizer* s = new wxBoxSizer(wxVERTICAL); s->SetSizeHints(this); wxSizer* s2 = new wxStaticBoxSizer(wxVERTICAL, this, _LABEL_("language")); - s2->Add(new wxStaticText(this, wxID_ANY, _LABEL_("app language")), 0, wxALL, 4); + s2->Add(new wxStaticText(this, wxID_ANY, _LABEL_("app language")), 0, wxALL, 4); s2->Add(language, 0, wxEXPAND | (wxALL & ~wxTOP), 4); - s2->Add(new wxStaticText(this, wxID_ANY, _HELP_( "app language")), 0, wxALL, 4); + s2->Add(new wxStaticText(this, wxID_ANY, _HELP_( "app language")), 0, wxALL, 4); s->Add(s2, 0, wxEXPAND | wxALL, 8); wxSizer* s3 = new wxStaticBoxSizer(wxVERTICAL, this, _LABEL_("windows")); s3->Add(open_sets_in_new_window, 0, wxALL, 4); s->Add(s3, 0, wxEXPAND | (wxALL & ~wxTOP), 8); + wxSizer* s4 = new wxStaticBoxSizer(wxVERTICAL, this, _LABEL_("dark mode")); + s4->Add(dark_mode, 0, wxEXPAND | (wxALL & ~wxTOP), 4); + s4->Add(new wxStaticText(this, wxID_ANY, _HELP_( "app language")), 0, wxALL, 4); + s->Add(s4, 0, wxEXPAND | wxALL, 8); SetSizer(s); } @@ -202,6 +211,8 @@ void GlobalPreferencesPage::store() { // set the_locale? // open_sets_in_new_window settings.open_sets_in_new_window = open_sets_in_new_window->GetValue(); + // dark mode + settings.dark_mode_type = (DarkModeType)dark_mode->GetSelection(); } // ----------------------------------------------------------------------------- : Preferences page : display diff --git a/src/gui/set/cards_panel.cpp b/src/gui/set/cards_panel.cpp index c5422a47..68a03f12 100644 --- a/src/gui/set/cards_panel.cpp +++ b/src/gui/set/cards_panel.cpp @@ -149,11 +149,11 @@ CardsPanel::CardsPanel(Window* parent, int id) add_menu_item_tr(menuCard, ID_SELECT_COLUMNS, nullptr, "card_list_columns"); menuFormat = new wxMenu(); - add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, "bold", "bold", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, "italic", "italic", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, "underline", "underline", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, "symbol", "symbols", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, "reminder", "reminder_text", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", wxITEM_CHECK); menuFormat->AppendSeparator(); insertSymbolMenu = new wxMenuItem(menuFormat, ID_INSERT_SYMBOL, _MENU_("insert symbol")); menuFormat->Append(insertSymbolMenu); @@ -282,11 +282,11 @@ wxMenu* CardsPanel::makeAddCardsSubmenu(bool add_single_card_option) { void CardsPanel::initUI(wxToolBar* tb, wxMenuBar* mb) { // Toolbar - add_tool_tr(tb, ID_FORMAT_BOLD, "bold", "bold", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_ITALIC, "italic", "italic", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_UNDERLINE, "underline", "underline", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_SYMBOL, "symbol", "symbols", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_REMINDER, "reminder", "reminder_text", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", false, wxITEM_CHECK); tb->AddSeparator(); toolAddCard = add_tool_tr(tb, ID_CARD_ADD, "card_add", "add_card", false, wxITEM_DROPDOWN); tb->SetDropdownMenu(ID_CARD_ADD, makeAddCardsSubmenu(true)); @@ -377,7 +377,7 @@ void CardsPanel::onUpdateUI(wxUpdateUIEvent& ev) { } case ID_COLLAPSE_NOTES: { bool collapse = notes->GetSize().y > 0; - collapse_notes->loadBitmaps(collapse ? _("btn_collapse") : _("btn_expand")); + collapse_notes->loadBitmaps(settings.darkModePrefix() + (collapse ? _("btn_collapse") : _("btn_expand"))); collapse_notes->SetHelpText(collapse ? _HELP_("collapse notes") : _HELP_("expand notes")); break; } diff --git a/src/gui/set/set_info_panel.cpp b/src/gui/set/set_info_panel.cpp index b7b38976..87bd6dac 100644 --- a/src/gui/set/set_info_panel.cpp +++ b/src/gui/set/set_info_panel.cpp @@ -34,19 +34,19 @@ void SetInfoPanel::onChangeSet() { void SetInfoPanel::initUI(wxToolBar* tb, wxMenuBar* mb) { // Toolbar - add_tool_tr(tb, ID_FORMAT_BOLD, "bold", "bold", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_ITALIC, "italic", "italic", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_UNDERLINE, "underline", "underline", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_SYMBOL, "symbol", "symbols", false, wxITEM_CHECK); - add_tool_tr(tb, ID_FORMAT_REMINDER, "reminder", "reminder_text", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", false, wxITEM_CHECK); + add_tool_tr(tb, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", false, wxITEM_CHECK); tb->Realize(); // Menus auto menuFormat = new wxMenu(); - add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, "bold", "bold", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, "italic", "italic", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, "underline", "underline", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, "symbol", "symbols", wxITEM_CHECK); - add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, "reminder", "reminder_text", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_BOLD, settings.darkModePrefix() + "bold", "bold", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_ITALIC, settings.darkModePrefix() + "italic", "italic", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_UNDERLINE, settings.darkModePrefix() + "underline", "underline", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_SYMBOL, settings.darkModePrefix() + "symbol", "symbols", wxITEM_CHECK); + add_menu_item_tr(menuFormat, ID_FORMAT_REMINDER, settings.darkModePrefix() + "reminder", "reminder_text", wxITEM_CHECK); mb->Insert(2, menuFormat, _MENU_("format")); // focus on editor editor->SetFocus(); diff --git a/src/gui/set/window.cpp b/src/gui/set/window.cpp index 2e166913..dacf7c49 100644 --- a/src/gui/set/window.cpp +++ b/src/gui/set/window.cpp @@ -79,17 +79,17 @@ SetWindow::SetWindow(Window* parent, const SetP& set) menuBar->Append(menuFile, _MENU_("file")); auto menuEdit = new wxMenu(); - add_menu_item(menuEdit, ID_EDIT_UNDO, "undo", _MENU_1_("undo",wxEmptyString), _HELP_("undo")); - add_menu_item(menuEdit, ID_EDIT_REDO, "redo", _MENU_1_("redo",wxEmptyString), _HELP_("redo")); + add_menu_item(menuEdit, ID_EDIT_UNDO, settings.darkModePrefix() + "undo", _MENU_1_("undo",wxEmptyString), _HELP_("undo")); + add_menu_item(menuEdit, ID_EDIT_REDO, settings.darkModePrefix() + "redo", _MENU_1_("redo",wxEmptyString), _HELP_("redo")); menuEdit->AppendSeparator(); - add_menu_item_tr(menuEdit, ID_EDIT_CUT, "cut", "cut"); + add_menu_item_tr(menuEdit, ID_EDIT_CUT, settings.darkModePrefix() + "cut", "cut"); add_menu_item_tr(menuEdit, ID_EDIT_COPY, "copy", "copy"); add_menu_item_tr(menuEdit, ID_EDIT_PASTE, "paste", "paste"); menuEdit->AppendSeparator(); add_menu_item_tr(menuEdit, ID_EDIT_SELECT_ALL, nullptr, "select_all"); menuEdit->AppendSeparator(); - add_menu_item_tr(menuEdit, ID_EDIT_FIND, "find", "find"); - add_menu_item_tr(menuEdit, ID_EDIT_FIND_NEXT, nullptr, "find_next"); + add_menu_item_tr(menuEdit, ID_EDIT_FIND, settings.darkModePrefix() + "find", "find"); + add_menu_item_tr(menuEdit, ID_EDIT_FIND_NEXT, settings.darkModePrefix() + "find", "find_next"); add_menu_item_tr(menuEdit, ID_EDIT_REPLACE, nullptr, "replace"); add_menu_item_tr(menuEdit, ID_EDIT_AUTO_REPLACE, nullptr, "auto_replace"); menuEdit->AppendSeparator(); @@ -122,12 +122,12 @@ SetWindow::SetWindow(Window* parent, const SetP& set) tb->AddSeparator(); add_tool_tr(tb, ID_FILE_EXPORT, "export", "export"); tb->AddSeparator(); - add_tool_tr(tb, ID_EDIT_CUT, "cut", "cut"); + add_tool_tr(tb, ID_EDIT_CUT, settings.darkModePrefix() + "cut", "cut"); add_tool_tr(tb, ID_EDIT_COPY, "copy", "copy"); add_tool_tr(tb, ID_EDIT_PASTE, "paste", "paste"); tb->AddSeparator(); - add_tool(tb, ID_EDIT_UNDO, "undo", {}, _TOOLTIP_1_("undo", {}), _HELP_("undo")); - add_tool(tb, ID_EDIT_REDO, "redo", {}, _TOOLTIP_1_("redo", {}), _HELP_("redo")); + add_tool(tb, ID_EDIT_UNDO, settings.darkModePrefix() + "undo", {}, _TOOLTIP_1_("undo", {}), _HELP_("undo")); + add_tool(tb, ID_EDIT_REDO, settings.darkModePrefix() + "redo", {}, _TOOLTIP_1_("redo", {}), _HELP_("redo")); tb->AddSeparator(); tb->Realize(); @@ -145,13 +145,13 @@ SetWindow::SetWindow(Window* parent, const SetP& set) #endif // panels - addPanel(menuWindow, tabBar, new CardsPanel (this, wxID_ANY), 0, _("window_cards"), _("cards tab")); - addPanel(menuWindow, tabBar, new StylePanel (this, wxID_ANY), 1, _("window_style"), _("style tab")); - addPanel(menuWindow, tabBar, new SetInfoPanel (this, wxID_ANY), 2, _("window_set_info"), _("set info tab")); - addPanel(menuWindow, tabBar, new KeywordsPanel (this, wxID_ANY), 3, _("window_keywords"), _("keywords tab")); - addPanel(menuWindow, tabBar, new StatsPanel (this, wxID_ANY), 4, _("window_statistics"), _("stats tab")); - addPanel(menuWindow, tabBar, new RandomPackPanel(this, wxID_ANY), 5, _("window_random_pack"),_("random pack tab")); - addPanel(menuWindow, tabBar, new ConsolePanel (this, wxID_ANY), 6, _("window_console"), _("console tab")); + addPanel(menuWindow, tabBar, new CardsPanel (this, wxID_ANY), 0, _("window_cards"), _("cards tab")); + addPanel(menuWindow, tabBar, new StylePanel (this, wxID_ANY), 1, _("window_style"), _("style tab")); + addPanel(menuWindow, tabBar, new SetInfoPanel (this, wxID_ANY), 2, settings.darkModePrefix() + _("window_set_info"), _("set info tab")); + addPanel(menuWindow, tabBar, new KeywordsPanel (this, wxID_ANY), 3, settings.darkModePrefix() + _("window_keywords"), _("keywords tab")); + addPanel(menuWindow, tabBar, new StatsPanel (this, wxID_ANY), 4, _("window_statistics"), _("stats tab")); + addPanel(menuWindow, tabBar, new RandomPackPanel(this, wxID_ANY), 5, _("window_random_pack"),_("random pack tab")); + addPanel(menuWindow, tabBar, new ConsolePanel (this, wxID_ANY), 6, _("window_console"), _("console tab")); selectPanel(ID_WINDOW_CARDS); // select cards panel // loose ends diff --git a/src/gui/symbol/basic_shape_editor.cpp b/src/gui/symbol/basic_shape_editor.cpp index cac7178b..fb6e349d 100644 --- a/src/gui/symbol/basic_shape_editor.cpp +++ b/src/gui/symbol/basic_shape_editor.cpp @@ -42,10 +42,10 @@ void SymbolBasicShapeEditor::initUI(wxToolBar* tb, wxMenuBar* mb) { sides->SetHelpText(_HELP_("sides")); sides->SetSize(50, -1); tb->AddSeparator(); - add_tool_tr(tb, ID_SHAPE_CIRCLE, "circle", "ellipse", true, wxITEM_CHECK); - add_tool_tr(tb, ID_SHAPE_RECTANGLE, "rectangle", "rectangle",true, wxITEM_CHECK); - add_tool_tr(tb, ID_SHAPE_POLYGON, "triangle", "polygon", true, wxITEM_CHECK); - add_tool_tr(tb, ID_SHAPE_STAR, "star", "star", true, wxITEM_CHECK); + add_tool_tr(tb, ID_SHAPE_CIRCLE, settings.darkModePrefix() + "circle", "ellipse", true, wxITEM_CHECK); + add_tool_tr(tb, ID_SHAPE_RECTANGLE, settings.darkModePrefix() + "rectangle", "rectangle",true, wxITEM_CHECK); + add_tool_tr(tb, ID_SHAPE_POLYGON, settings.darkModePrefix() + "triangle", "polygon", true, wxITEM_CHECK); + add_tool_tr(tb, ID_SHAPE_STAR, settings.darkModePrefix() + "star", "star", true, wxITEM_CHECK); // tb->AddControl(sidesL); tb->AddControl(sides); tb->Realize(); diff --git a/src/gui/symbol/window.cpp b/src/gui/symbol/window.cpp index 2ab47263..0cedab2b 100644 --- a/src/gui/symbol/window.cpp +++ b/src/gui/symbol/window.cpp @@ -83,8 +83,8 @@ void SymbolWindow::init(Window* parent, SymbolP symbol) { menuBar->Append(menuFile, _MENU_("file")); auto menuEdit = new wxMenu(); - add_menu_item(menuEdit, ID_EDIT_UNDO, "undo", _MENU_1_("undo",wxEmptyString), _HELP_("undo")); - add_menu_item(menuEdit, ID_EDIT_REDO, "redo", _MENU_1_("redo",wxEmptyString), _HELP_("redo")); + add_menu_item(menuEdit, ID_EDIT_UNDO, settings.darkModePrefix() + "undo", _MENU_1_("undo",wxEmptyString), _HELP_("undo")); + add_menu_item(menuEdit, ID_EDIT_REDO, settings.darkModePrefix() + "redo", _MENU_1_("redo",wxEmptyString), _HELP_("redo")); menuEdit->AppendSeparator(); add_menu_item_tr(menuEdit, ID_EDIT_GROUP, "group", "group"); add_menu_item_tr(menuEdit, ID_EDIT_UNGROUP, "ungroup", "ungroup"); @@ -94,11 +94,11 @@ void SymbolWindow::init(Window* parent, SymbolP symbol) { auto menuTool = new wxMenu(); add_menu_item_tr(menuTool, ID_MODE_SELECT, "mode_select", "select", wxITEM_CHECK); - add_menu_item_tr(menuTool, ID_MODE_ROTATE, "mode_rotate", "rotate", wxITEM_CHECK); + add_menu_item_tr(menuTool, ID_MODE_ROTATE, settings.darkModePrefix() + "mode_rotate", "rotate", wxITEM_CHECK); add_menu_item_tr(menuTool, ID_MODE_POINTS, "mode_curve", "points", wxITEM_CHECK); - add_menu_item_tr(menuTool, ID_MODE_SHAPES, "circle", "basic_shapes", wxITEM_CHECK); + add_menu_item_tr(menuTool, ID_MODE_SHAPES, settings.darkModePrefix() + "circle", "basic_shapes", wxITEM_CHECK); add_menu_item_tr(menuTool, ID_MODE_SYMMETRY, "mode_symmetry", "symmetry", wxITEM_CHECK); - add_menu_item_tr(menuTool, ID_MODE_PAINT, "mode_paint", "paint", wxITEM_CHECK); + add_menu_item_tr(menuTool, ID_MODE_PAINT, settings.darkModePrefix() + "mode_paint", "paint", wxITEM_CHECK); menuBar->Append(menuTool, _MENU_("tool")); SetMenuBar(menuBar); @@ -111,8 +111,8 @@ void SymbolWindow::init(Window* parent, SymbolP symbol) { wxToolBar* tb = CreateToolBar(wxTB_FLAT | wxNO_BORDER | wxTB_HORIZONTAL | wxTB_TEXT); add_tool_tr(tb, ID_FILE_STORE, "apply", "store_symbol", true); tb->AddSeparator(); - add_tool(tb, ID_EDIT_UNDO, "undo", _TOOL_("undo"), _TOOLTIP_1_("undo",wxEmptyString), _HELP_("undo")); - add_tool(tb, ID_EDIT_REDO, "redo", _TOOL_("redo"), _TOOLTIP_1_("redo",wxEmptyString), _HELP_("redo")); + add_tool(tb, ID_EDIT_UNDO, settings.darkModePrefix() + "undo", _TOOL_("undo"), _TOOLTIP_1_("undo",wxEmptyString), _HELP_("undo")); + add_tool(tb, ID_EDIT_REDO, settings.darkModePrefix() + "redo", _TOOL_("redo"), _TOOLTIP_1_("redo",wxEmptyString), _HELP_("redo")); tb->AddSeparator(); add_tool_tr(tb, ID_VIEW_GRID, "grid", "grid", true, wxITEM_CHECK); add_tool_tr(tb, ID_VIEW_GRID_SNAP, "grid_snap", "snap", true, wxITEM_CHECK); @@ -123,13 +123,13 @@ void SymbolWindow::init(Window* parent, SymbolP symbol) { wxToolBar* em = new wxToolBar(emp, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT | wxTB_VERTICAL | wxTB_HORZ_TEXT); em->SetToolBitmapSize(wxSize(17,17)); add_tool_tr(em, ID_MODE_SELECT, "mode_select", "select", true, wxITEM_CHECK); - add_tool_tr(em, ID_MODE_ROTATE, "mode_rotate", "rotate", true, wxITEM_CHECK); + add_tool_tr(em, ID_MODE_ROTATE, settings.darkModePrefix() + "mode_rotate", "rotate", true, wxITEM_CHECK); em->AddSeparator(); add_tool_tr(em, ID_MODE_POINTS, "mode_curve", "points", true, wxITEM_CHECK); em->AddSeparator(); - add_tool_tr(em, ID_MODE_SHAPES, "circle", "basic shapes", true, wxITEM_CHECK); + add_tool_tr(em, ID_MODE_SHAPES, settings.darkModePrefix() + "circle", "basic shapes", true, wxITEM_CHECK); add_tool_tr(em, ID_MODE_SYMMETRY, "mode_symmetry", "symmetry", true, wxITEM_CHECK); - //add_tool_tr(em, ID_MODE_PAINT, "mode_paint", "paint", true, wxITEM_CHECK); + //add_tool_tr(em, ID_MODE_PAINT, settings.darkModePrefix() + "mode_paint", "paint", true, wxITEM_CHECK); em->Realize(); // Lay out @@ -176,13 +176,13 @@ void SymbolWindow::init(Window* parent, SymbolP symbol) { em = new wxToolBar(emp, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTB_FLAT | wxTB_VERTICAL | wxTB_HORZ_TEXT); em->SetToolBitmapSize(wxSize(17,17)); String spaces(max(0,n-1), _(' ')); - add_tool(em, ID_MODE_SELECT, "mode_select", _TOOL_("select") + spaces, _TOOLTIP_("select"), _HELP_("select"), wxITEM_CHECK); - add_tool(em, ID_MODE_ROTATE, "mode_rotate", _TOOL_("rotate") + spaces, _TOOLTIP_("rotate"), _HELP_("rotate"), wxITEM_CHECK); + add_tool(em, ID_MODE_SELECT, "mode_select", _TOOL_("select") + spaces, _TOOLTIP_("select"), _HELP_("select"), wxITEM_CHECK); + add_tool(em, ID_MODE_ROTATE, settings.darkModePrefix() + "mode_rotate", _TOOL_("rotate") + spaces, _TOOLTIP_("rotate"), _HELP_("rotate"), wxITEM_CHECK); em->AddSeparator(); - add_tool(em, ID_MODE_POINTS, "mode_curve", _TOOL_("points") + spaces, _TOOLTIP_("points"), _HELP_("points"), wxITEM_CHECK); + add_tool(em, ID_MODE_POINTS, "mode_curve", _TOOL_("points") + spaces, _TOOLTIP_("points"), _HELP_("points"), wxITEM_CHECK); em->AddSeparator(); - add_tool(em, ID_MODE_SHAPES, "circle", _TOOL_("basic shapes") + spaces, _TOOLTIP_("basic shapes"),_HELP_("basic shapes"), wxITEM_CHECK); - add_tool(em, ID_MODE_SYMMETRY, "mode_symmetry", _TOOL_("symmetry") + spaces, _TOOLTIP_("symmetry"), _HELP_("symmetry"), wxITEM_CHECK); + add_tool(em, ID_MODE_SHAPES, settings.darkModePrefix() + "circle", _TOOL_("basic shapes") + spaces, _TOOLTIP_("basic shapes"), _HELP_("basic shapes"), wxITEM_CHECK); + add_tool(em, ID_MODE_SYMMETRY, "mode_symmetry", _TOOL_("symmetry") + spaces, _TOOLTIP_("symmetry"), _HELP_("symmetry"), wxITEM_CHECK); em->Realize(); es = new wxBoxSizer(wxVERTICAL); diff --git a/src/gui/value/symbol.cpp b/src/gui/value/symbol.cpp index 84edca36..5a4a925b 100644 --- a/src/gui/value/symbol.cpp +++ b/src/gui/value/symbol.cpp @@ -44,7 +44,8 @@ void SymbolValueEditor::drawButton(RotatedDC& dc, int button, const String& text double y = 0; // draw button draw_button(&editor(), dc.getDC(), dc.trRectToBB(RealRect(x,y,width,height)), false, down, true); - // draw text + // draw text + dc.SetTextForeground(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); RealSize text_size = dc.GetTextExtent(text); dc.DrawText(text, align_in_rect((Alignment)(ALIGN_BOTTOM | ALIGN_CENTER), text_size, RealRect(x, y, width,height*0.9))); // draw image diff --git a/src/gui/welcome_window.cpp b/src/gui/welcome_window.cpp index 841073d2..aeff5b80 100644 --- a/src/gui/welcome_window.cpp +++ b/src/gui/welcome_window.cpp @@ -31,7 +31,7 @@ bool __compare_package_name(const PackagedP& a, const PackagedP& b) { } WelcomeWindow::WelcomeWindow() : wxFrame(nullptr, wxID_ANY, _TITLE_("magic set editor"), wxDefaultPosition, wxSize(520,380), wxDEFAULT_DIALOG_STYLE | wxTAB_TRAVERSAL | wxCLIP_CHILDREN ) - , logo (load_resource_image(_("about"))) + , logo (load_resource_image(settings.darkModePrefix() + _("about"))) { SetIcon(load_resource_icon(_("app"))); @@ -96,7 +96,7 @@ void WelcomeWindow::draw(DC& dc) { wxSize ws = GetClientSize(); // draw background dc.SetPen (*wxTRANSPARENT_PEN); - dc.SetBrush(Color(240,247,255)); + dc.SetBrush(settings.darkModeColor()); dc.DrawRectangle(0, 0, ws.GetWidth(), ws.GetHeight()); // draw logo dc.DrawBitmap(logo, (ws.GetWidth() - logo.GetWidth()) / 2, 5); diff --git a/src/main.cpp b/src/main.cpp index 7f680d19..745e6ca5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -96,6 +96,7 @@ int MSE::OnRun() { cli.init(); package_manager.init(); settings.read(); + SetAppearance((Appearance)settings.dark_mode_type); the_locale = Locale::byName(settings.locale); nag_about_ascii_version(); diff --git a/src/render/symbol/viewer.cpp b/src/render/symbol/viewer.cpp index 77fa18c0..aa6fe8be 100644 --- a/src/render/symbol/viewer.cpp +++ b/src/render/symbol/viewer.cpp @@ -70,11 +70,7 @@ typedef shared_ptr MemoryDCP; // Return a temporary DC with the same size as the parameter MemoryDCP getTempDC(DC& dc) { wxSize s = dc.GetSize(); - #ifdef __WXMSW__ - Bitmap buffer(s.GetWidth(), s.GetHeight(), 1); - #else - Bitmap buffer(s.GetWidth(), s.GetHeight(), 24); - #endif + Bitmap buffer(s.GetWidth(), s.GetHeight(), 24); MemoryDCP newDC(new wxMemoryDC); newDC->SelectObject(buffer); clearDC(*newDC, *wxBLACK_BRUSH); diff --git a/src/render/text/compound.cpp b/src/render/text/compound.cpp index 27027e7a..c123ed2b 100644 --- a/src/render/text/compound.cpp +++ b/src/render/text/compound.cpp @@ -11,7 +11,7 @@ // ----------------------------------------------------------------------------- : CompoundTextElement -void CompoundTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { +void CompoundTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const { for (auto const& e : children) { size_t start_ = max(start, e->start); size_t end_ = min(end, e->end); @@ -19,7 +19,7 @@ void CompoundTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect e->draw(dc, scale, RealRect(rect.x + xs[start_ - start] - xs[0], rect.y, xs[end_ - start] - xs[start_ - start], rect.height), - xs + start_ - start, what, start_, end_); + xs + start_ - start, what, start_, end_, native_look); } if (end <= e->end) return; // nothing can be after this } @@ -54,18 +54,18 @@ double CompoundTextElement::scaleStep() const { // ----------------------------------------------------------------------------- : AtomTextElement -void AtomTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { +void AtomTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const { if (what & DRAW_ACTIVE) { dc.SetPen(*wxTRANSPARENT_PEN); dc.SetBrush(background_color); dc.DrawRectangle(rect); } - CompoundTextElement::draw(dc, scale, rect, xs, what, start, end); + CompoundTextElement::draw(dc, scale, rect, xs, what, start, end, native_look); } // ----------------------------------------------------------------------------- : ErrorTextElement -void ErrorTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { +void ErrorTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const { // Draw wavy underline if (what & DRAW_ERRORS) { dc.SetPen(*wxRED_PEN); @@ -82,5 +82,5 @@ void ErrorTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, c } } // Draw the contents - CompoundTextElement::draw(dc, scale, rect, xs, what, start, end); + CompoundTextElement::draw(dc, scale, rect, xs, what, start, end, native_look); } diff --git a/src/render/text/element.hpp b/src/render/text/element.hpp index 69e81d86..ebd130bf 100644 --- a/src/render/text/element.hpp +++ b/src/render/text/element.hpp @@ -58,7 +58,7 @@ public: /// Draw a subsection section of the text in the given rectangle /** xs give the x coordinates for each character * this->start <= start < end <= this->end <= text.size() */ - virtual void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const = 0; + virtual void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const = 0; /// Get information on all characters in the range [start...end) and store them in out virtual void getCharInfo(RotatedDC& dc, double scale, vector& out) const = 0; /// Return the minimum scale factor allowed (starts at 1) @@ -77,7 +77,7 @@ public: , font(font), draw_as(draw_as), break_style(break_style) {} - void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const override; + void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const override; void getCharInfo(RotatedDC& dc, double scale, vector& out) const override; double minScale() const override; double scaleStep() const override; @@ -96,7 +96,7 @@ public: , font(font), ctx(*ctx) {} - void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const override; + void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const override; void getCharInfo(RotatedDC& dc, double scale, vector& out) const override; double minScale() const override; double scaleStep() const override; @@ -113,7 +113,7 @@ class CompoundTextElement : public TextElement { public: CompoundTextElement(size_t start, size_t end) : TextElement(start, end) {} - void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const override; + void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const override; void getCharInfo(RotatedDC& dc, double scale, vector& out) const override; double minScale() const override; double scaleStep() const override; @@ -130,7 +130,7 @@ class AtomTextElement : public CompoundTextElement { public: AtomTextElement(size_t start, size_t end, Color background_color) : CompoundTextElement(start, end), background_color(background_color) {} - void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const override; + void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const override; private: Color background_color; }; @@ -140,7 +140,7 @@ class ErrorTextElement : public CompoundTextElement { public: ErrorTextElement(size_t start, size_t end) : CompoundTextElement(start, end) {} - void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const override; + void draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const override; }; // ----------------------------------------------------------------------------- : TextElements diff --git a/src/render/text/font.cpp b/src/render/text/font.cpp index 54f96328..c4c43ec8 100644 --- a/src/render/text/font.cpp +++ b/src/render/text/font.cpp @@ -12,16 +12,23 @@ // ----------------------------------------------------------------------------- : FontTextElement -void FontTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { +void FontTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const { if ((what & draw_as) != draw_as) return; // don't draw // text String text = content.substr(start - this->start, end - start); if (!text.empty() && text.GetChar(text.size() - 1) == _('\n')) { text = text.substr(0, text.size() - 1); // don't draw last \n } - // draw + // draw + Color font_color = font->color; + RealSize margin(0, 0); + if (native_look) { + font->color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + margin = RealSize(1., 0); + } dc.SetFont(*font, scale); - dc.DrawTextWithShadow(text, *font, rect.position()); + dc.DrawTextWithShadow(text, *font, rect.position() + margin); + if (native_look) font->color = font_color; } void FontTextElement::getCharInfo(RotatedDC& dc, double scale, vector& out) const { diff --git a/src/render/text/symbol.cpp b/src/render/text/symbol.cpp index 134b8a2f..a16dcc6e 100644 --- a/src/render/text/symbol.cpp +++ b/src/render/text/symbol.cpp @@ -12,7 +12,7 @@ // ----------------------------------------------------------------------------- : SymbolTextElement -void SymbolTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end) const { +void SymbolTextElement::draw(RotatedDC& dc, double scale, const RealRect& rect, const double* xs, DrawWhat what, size_t start, size_t end, bool native_look) const { if (!(what & DRAW_NORMAL)) return; if (font.font) { font.font->draw(dc, ctx, rect, font.size * scale, font.alignment, content.substr(start - this->start, end-start)); diff --git a/src/render/text/viewer.cpp b/src/render/text/viewer.cpp index cae26541..79a8fcc2 100644 --- a/src/render/text/viewer.cpp +++ b/src/render/text/viewer.cpp @@ -72,7 +72,7 @@ TextViewer::~TextViewer() {} // ----------------------------------------------------------------------------- : Drawing -void TextViewer::draw(RotatedDC& dc, const TextStyle& style, DrawWhat what) { +void TextViewer::draw(RotatedDC& dc, const TextStyle& style, DrawWhat what, bool native_look) { assert(!lines.empty()); // draw anything? if (what == DRAW_NOTHING) return; @@ -88,11 +88,11 @@ void TextViewer::draw(RotatedDC& dc, const TextStyle& style, DrawWhat what) { // Draw characters separatly for (size_t i = 0 ; i < l.positions.size() - 1 ; ++i) { RealRect rect(l.positions[i], l.top, l.positions[i+1] - l.positions[i] , l.line_height); - elements.draw(dc, scale, rect, &l.positions[i], what, l.start + i, l.start + i + 1); + elements.draw(dc, scale, rect, &l.positions[i], what, l.start + i, l.start + i + 1, native_look); } } else { RealRect rect(l.positions.front(), l.top, l.width(), l.line_height); - elements.draw(dc, scale, rect, &*l.positions.begin(), what, l.start, l.end()); + elements.draw(dc, scale, rect, &*l.positions.begin(), what, l.start, l.end(), native_look); } } } diff --git a/src/render/text/viewer.hpp b/src/render/text/viewer.hpp index 762e4a7c..3df0baad 100644 --- a/src/render/text/viewer.hpp +++ b/src/render/text/viewer.hpp @@ -46,7 +46,7 @@ public: /** The drawing information is cached, * before calling draw again with different text/style reset() should be called */ - void draw(RotatedDC& dc, const TextStyle& style, DrawWhat what); + void draw(RotatedDC& dc, const TextStyle& style, DrawWhat what, bool native_look); /// Draw an indicator for selected text void drawSelection(RotatedDC& dc, const TextStyle& style, size_t sel_start, size_t sel_end); /// Draw separators for tags diff --git a/src/render/value/choice.cpp b/src/render/value/choice.cpp index 0ddd01f1..f863fbe9 100644 --- a/src/render/value/choice.cpp +++ b/src/render/value/choice.cpp @@ -21,7 +21,13 @@ bool ChoiceValueViewer::prepare(RotatedDC& dc) { } void ChoiceValueViewer::draw(RotatedDC& dc) { drawFieldBorder(dc); - if (style().render_style & RENDER_HIDDEN) return; + if (style().render_style & RENDER_HIDDEN) return; + // render background + if (nativeLook()) { + dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(RealRect(0, 0, dc.getWidth(), dc.getHeight())); + } draw_choice_viewer(dc, *this, style(), value().value()); } @@ -101,11 +107,18 @@ void draw_choice_viewer(RotatedDC& dc, ValueViewer& viewer, ChoiceStyle& style, Alignment text_align = style.alignment; if (style.render_style & RENDER_IMAGE) { text_align = ALIGN_MIDDLE_LEFT; // can't align both text and image in the same way + } + Font& font = style.font; + Color font_color = font.color; + if (viewer.nativeLook()) { + font.color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + margin += 1.; } - dc.SetFont(style.font, 1.0); + dc.SetFont(font, 1.0); RealSize size = dc.GetTextExtent(text); - RealPoint pos = align_in_rect(text_align, size, dc.getInternalRect()) + RealSize(margin, 0); - dc.DrawTextWithShadow(text, style.font, pos); + RealPoint text_pos = align_in_rect(text_align, size, dc.getInternalRect()) + RealSize(margin, 0); + dc.DrawTextWithShadow(text, font, text_pos); + if (viewer.nativeLook()) font.color = font_color; } } diff --git a/src/render/value/color.cpp b/src/render/value/color.cpp index 83eaa060..45c3f4f6 100644 --- a/src/render/value/color.cpp +++ b/src/render/value/color.cpp @@ -16,8 +16,6 @@ IMPLEMENT_VALUE_VIEWER(Color); void ColorValueViewer::draw(RotatedDC& dc) { // draw in the value color - dc.SetPen(*wxTRANSPARENT_PEN); - dc.SetBrush(value().value()); if (nativeLook()) { // native look // find name of color @@ -31,15 +29,20 @@ void ColorValueViewer::draw(RotatedDC& dc) { break; } } - } - // draw name and color - dc.SetPen(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); - dc.DrawRectangle(RealRect(0, 0, 40, dc.getHeight())); - dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + } + // draw background dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); dc.DrawRectangle(RealRect(40, 0, dc.getWidth()-40, dc.getHeight())); - dc.DrawText(color_name, RealPoint(43, 3)); + // draw color + dc.SetPen(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT)); + dc.SetBrush(value().value()); + dc.DrawRectangle(RealRect(0, 0, 40, dc.getHeight())); + // draw name + dc.DrawText(color_name, RealPoint(45, 3)); } else { + dc.SetPen(*wxTRANSPARENT_PEN); + dc.SetBrush(value().value()); // is there a mask? const AlphaMask& alpha_mask = getMask(dc); if (alpha_mask.isLoaded()) { diff --git a/src/render/value/multiple_choice.cpp b/src/render/value/multiple_choice.cpp index 0145e387..a0e54239 100644 --- a/src/render/value/multiple_choice.cpp +++ b/src/render/value/multiple_choice.cpp @@ -24,7 +24,13 @@ bool MultipleChoiceValueViewer::prepare(RotatedDC& dc) { void MultipleChoiceValueViewer::draw(RotatedDC& dc) { drawFieldBorder(dc); if (style().render_style & RENDER_HIDDEN) return; - RealPoint pos = align_in_rect(style().alignment, RealSize(0,0), dc.getInternalRect()); + RealPoint pos = align_in_rect(style().alignment, RealSize(0,0), dc.getInternalRect()); + // render background + if (nativeLook()) { + dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(RealRect(0, 0, dc.getWidth(), dc.getHeight())); + } // selected choices vector selected; value().get(selected); @@ -38,7 +44,7 @@ void MultipleChoiceValueViewer::draw(RotatedDC& dc) { if (active) select_it++; drawChoice(dc, pos, choice, active); } - } else if (style().render_style & RENDER_LIST) { + } else if (style().render_style & RENDER_LIST) { // render only selected choices FOR_EACH(choice, selected) { drawChoice(dc, pos, choice); @@ -70,13 +76,21 @@ void MultipleChoiceValueViewer::drawChoice(RotatedDC& dc, RealPoint& pos, const } } if (style().render_style & RENDER_TEXT) { - // draw text + // draw text + Font& font = style().font; + Color font_color = font.color; + RealSize margin(0, 0); + if (nativeLook()) { + font.color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + margin = RealSize(1., 0); + } String text = tr(getStylePackage(), choice, capitalize_sentence); - dc.SetFont(style().font,1); + dc.SetFont(font,1); RealSize text_size = dc.GetTextExtent(text); - RealPoint text_pos = align_in_rect(ALIGN_MIDDLE_LEFT, text_size, RealRect(pos.x + size.width + 1, pos.y, 0,size.height)); - dc.DrawTextWithShadow(text, style().font, text_pos); + RealPoint text_pos = align_in_rect(ALIGN_MIDDLE_LEFT, text_size, RealRect(pos.x + size.width + 1, pos.y, 0,size.height)) + margin; + dc.DrawTextWithShadow(text, font, text_pos); size = add_horizontal(size, text_size); + if (nativeLook()) font.color = font_color; } // next position pos = move_in_direction(style().direction, pos, size, style().spacing); diff --git a/src/render/value/package_choice.cpp b/src/render/value/package_choice.cpp index 1aff601b..fd40edbb 100644 --- a/src/render/value/package_choice.cpp +++ b/src/render/value/package_choice.cpp @@ -43,7 +43,13 @@ void PackageChoiceValueViewer::initItems() { } void PackageChoiceValueViewer::draw(RotatedDC& dc) { - drawFieldBorder(dc); + drawFieldBorder(dc); + // draw background + if (nativeLook()) { + dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(RealRect(0, 0, dc.getWidth(), dc.getHeight())); + } // find item String text = value().package_name; Bitmap image; @@ -61,8 +67,16 @@ void PackageChoiceValueViewer::draw(RotatedDC& dc) { if (image.Ok()) { dc.DrawBitmap(image, RealPoint(0,0)); } - // draw text - dc.SetFont(style().font, 1.0); - RealPoint pos = align_in_rect(ALIGN_MIDDLE_LEFT, RealSize(0, dc.GetCharHeight()), dc.getInternalRect()) + RealSize(17., 0); - dc.DrawTextWithShadow(text, style().font, pos); + // draw text + Font& font = style().font; + Color font_color = font.color; + RealSize margin(0, 0); + if (nativeLook()) { + font.color = wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOWTEXT); + margin = RealSize(1., 0); + } + dc.SetFont(font, 1.0); + RealPoint pos = align_in_rect(ALIGN_MIDDLE_LEFT, RealSize(0, dc.GetCharHeight()), dc.getInternalRect()) + RealSize(17., 0) + margin; + dc.DrawTextWithShadow(text, font, pos); + if (nativeLook()) font.color = font_color; } diff --git a/src/render/value/text.cpp b/src/render/value/text.cpp index e084e6e9..d3b11eb9 100644 --- a/src/render/value/text.cpp +++ b/src/render/value/text.cpp @@ -20,15 +20,21 @@ bool TextValueViewer::prepare(RotatedDC& dc) { } void TextValueViewer::draw(RotatedDC& dc) { - drawFieldBorder(dc); + drawFieldBorder(dc); + // draw background + if (nativeLook()) { + dc.SetBrush(wxSystemSettings::GetColour(wxSYS_COLOUR_WINDOW)); + dc.SetPen(*wxTRANSPARENT_PEN); + dc.DrawRectangle(RealRect(0, 0, dc.getWidth(), dc.getHeight())); + } if (!v.prepared()) { v.prepare(dc, value().value(), style(), getContext()); dc.setStretch(getStretch()); } DrawWhat what = drawWhat(); - v.draw(dc, style(), (DrawWhat)(what & DRAW_ACTIVE)); + v.draw(dc, style(), (DrawWhat)(what & DRAW_ACTIVE), nativeLook()); setFieldBorderPen(dc); - v.draw(dc, style(), (DrawWhat)(what & ~DRAW_ACTIVE)); + v.draw(dc, style(), (DrawWhat)(what & ~DRAW_ACTIVE), nativeLook()); } void TextValueViewer::onValueChange() { diff --git a/src/script/functions/basic.cpp b/src/script/functions/basic.cpp index 4595c903..4493e8a2 100644 --- a/src/script/functions/basic.cpp +++ b/src/script/functions/basic.cpp @@ -43,6 +43,10 @@ SCRIPT_FUNCTION(get_mse_locale) { SCRIPT_RETURN(settings.locale); } +SCRIPT_FUNCTION(get_mse_dark_mode) { + SCRIPT_RETURN(settings.darkMode()); +} + SCRIPT_FUNCTION(trace) { SCRIPT_PARAM_C(String, input); #if defined(_DEBUG) && 0 @@ -866,10 +870,12 @@ SCRIPT_FUNCTION(rule) { // ----------------------------------------------------------------------------- : Init void init_script_basic_functions(Context& ctx) { - // debugging + // app info ctx.setVariable(_("get_mse_version"), script_get_mse_version); ctx.setVariable(_("get_mse_locale"), script_get_mse_locale); ctx.setVariable(_("get_mse_path"), script_get_mse_path); + ctx.setVariable(_("get_mse_dark_mode"), script_get_mse_dark_mode); + // debugging ctx.setVariable(_("trace"), script_trace); ctx.setVariable(_("warning"), script_warning); ctx.setVariable(_("error"), script_error); diff --git a/src/script/parser.cpp b/src/script/parser.cpp index c98c4a07..c2818d0d 100644 --- a/src/script/parser.cpp +++ b/src/script/parser.cpp @@ -193,6 +193,17 @@ void TokenIterator::readToken() { addToken(TOK_STRING, include_file, pos); addToken(TOK_RPAREN, ")", eol); pos = eol; + } else if (is_substr(pos, end, "include dark file:")) { + pos += 18; // "include dark file:" + const char* newlines = "\r\n"; + auto eol = find_first_of(pos, end, newlines, newlines + 2); + String include_file = trim(StringView(pos, eol)) + (settings.darkMode() ? _("_dark") : _("")); + // include_file("filename_dark") + addToken(TOK_NAME, "include_file", pos - 18); + addToken(TOK_LPAREN, "(", pos); + addToken(TOK_STRING, include_file, pos); + addToken(TOK_RPAREN, ")", eol); + pos = eol; } else if (is_substr(pos, end, "include file:")) { pos += 13; // "include file:" const char* newlines = "\r\n"; diff --git a/src/util/io/reader.cpp b/src/util/io/reader.cpp index a2d3183f..caa3b45d 100644 --- a/src/util/io/reader.cpp +++ b/src/util/io/reader.cpp @@ -357,10 +357,14 @@ template <> void Reader::handle(Vector2D& vec) { template <> void Reader::handle(LocalFileName& f) { f = LocalFileName::fromReadString(this->getValue()); } - -String Reader::addLocale(String filename) { - return filename + _("_") + settings.locale; -} + +String Reader::addLocale(String filename) { + return filename + _("_") + settings.locale; +} + +String Reader::addDark(String filename) { + return filename + (settings.darkMode() ? _("_dark") : _("")); +} // ----------------------------------------------------------------------------- : EnumReader diff --git a/src/util/io/reader.hpp b/src/util/io/reader.hpp index 6c4f3983..d5597ad1 100644 --- a/src/util/io/reader.hpp +++ b/src/util/io/reader.hpp @@ -116,9 +116,10 @@ public: /// The package being read from inline Packaged* getPackage() const { return package; } - - String addLocale(String); - + + String addLocale(String); + String addDark(String); + /// Set the value that will be returned by the next getValue() call (may mess up the state of the reader) inline void setValue(const String& value) { state = UNHANDLED; previous_value = value; }; @@ -180,8 +181,8 @@ private: /** Maybe the key is "include file" */ template void unknownKey(T& v) { - if (key == _("include_file") || key == _("include_localized_file")) { - value = key == _("include_localized_file") ? addLocale(value) : value; + if (key == _("include_file") || key == _("include_localized_file") || key == _("include_dark_file")) { + value = key == _("include_localized_file") ? addLocale(value) : key == _("include_dark_file") ? addDark(value) : value; auto [stream, include_package] = openFileFromPackage(package, value); Reader sub_reader(*stream, include_package, value, ignore_invalid); if (sub_reader.file_app_version == 0) { diff --git a/tools/website/drupal/mse-drupal-modules/highlight.inc b/tools/website/drupal/mse-drupal-modules/highlight.inc index 65de9a64..73fc78fe 100644 --- a/tools/website/drupal/mse-drupal-modules/highlight.inc +++ b/tools/website/drupal/mse-drupal-modules/highlight.inc @@ -194,6 +194,8 @@ function highlight_script($code) { $ret .= "" . $matches[0] . ""; } else if (preg_match("@^(include localized file:)(.*)@",$code, $matches)) { $ret .= "" . $matches[1] . "" . $matches[2]; + } else if (preg_match("@^(include dark file:)(.*)@",$code, $matches)) { + $ret .= "" . $matches[1] . "" . $matches[2]; } else if (preg_match("@^(include file:)(.*)@",$code, $matches)) { $ret .= "" . $matches[1] . "" . $matches[2]; } else if (preg_match("@^([0-9][0-9.]*|true|false)@",$code, $matches)) {