From 9f241ca14b5c277a44c96ad69029715ba7aeb7de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Wed, 17 Jul 2024 20:23:33 +0200 Subject: [PATCH] Clean / improve / update code --- android/gradle.properties | 4 +- assets/ui/button_back.png | Bin 3771 -> 2422 bytes assets/ui/button_delete_saved_game.png | Bin 5813 -> 7834 bytes assets/ui/button_resume_game.png | Bin 3659 -> 3434 bytes assets/ui/button_start.png | Bin 3999 -> 3058 bytes assets/ui/type_pick-image.png | Bin 6046 -> 6857 bytes assets/ui/type_pick-word.png | Bin 6056 -> 6914 bytes .../metadata/android/en-US/changelogs/66.txt | 1 + .../metadata/android/fr-FR/changelogs/66.txt | 1 + lib/config/default_game_settings.dart | 7 +- lib/config/default_global_settings.dart | 7 +- lib/ui/game/game_end.dart | 1 + lib/ui/helpers/styled_button.dart | 210 ++++++++++++++++++ lib/ui/layouts/parameters_layout.dart | 73 +++--- lib/ui/parameters/parameter_image.dart | 38 ---- lib/ui/parameters/parameter_painter.dart | 81 +------ lib/ui/parameters/parameter_widget.dart | 114 ++++++++++ .../actions/button_delete_saved_game.dart | 10 +- lib/ui/widgets/actions/button_game_quit.dart | 10 +- .../actions/button_game_start_new.dart | 12 +- .../actions/button_resume_saved_game.dart | 10 +- lib/ui/widgets/game/pick_word_game_image.dart | 1 - lib/ui/widgets/global_app_bar.dart | 12 +- pubspec.lock | 116 +++++----- pubspec.yaml | 10 +- resources/app/build_application_resources.sh | 67 +++--- resources/data/01_download_images.sh | 10 +- resources/data/03_optimize_images.sh | 10 +- resources/data/04_build_images_board.sh | 50 +++-- resources/data/05_build_assets_list.sh | 35 +-- resources/ui/build_ui_resources.sh | 49 ++-- resources/ui/images/button_back.svg | 2 +- .../ui/images/button_delete_saved_game.svg | 2 +- resources/ui/images/button_resume_game.svg | 2 +- resources/ui/images/button_start.svg | 2 +- resources/ui/images/type_pick-image.svg | 61 +++-- resources/ui/images/type_pick-word.svg | 61 +++-- 37 files changed, 652 insertions(+), 417 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/66.txt create mode 100644 fastlane/metadata/android/fr-FR/changelogs/66.txt create mode 100644 lib/ui/helpers/styled_button.dart delete mode 100644 lib/ui/parameters/parameter_image.dart create mode 100644 lib/ui/parameters/parameter_widget.dart diff --git a/android/gradle.properties b/android/gradle.properties index dfa6ea8..7468e09 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -1,5 +1,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true -app.versionName=0.2.0 -app.versionCode=65 +app.versionName=0.2.1 +app.versionCode=66 diff --git a/assets/ui/button_back.png b/assets/ui/button_back.png index cc48ffb1dbb653d9a996f139dfbe02969724bfa5..51d7a01d171f7d7f047ecf9dee2d7ceee23b310d 100644 GIT binary patch delta 2366 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 HoD!M<&5CYG delta 3725 zcmew+v|Dz9BnKM<14GcA9QKKdHuZcSo-U3d6}R5b%?t^7E_*Dq_?Exz83W@PGcF%9 z$uh~cFER9;eR)Z>t><J0wX6+#fi{X+cLFx=KDs0~r`qS#BBgF6j<iBf!HW_)ZY(!L zu60<gF*aa6VRYEQSmFP@awV2>z3=DF#Lna2zrNz!{paP+?LP1OypPdEgrOno<1zXA zzk0`=Q?~k+hewL-)S7jD*Qeh1Ob4X(taY4qyknNB#h;z_gk{I-{Tr3fOpTxY?8lRw zy7H2B8*PpDp8m8vBWvcSnP(=OPpo|8#_;2CYI|x&>dL=MzvxX{JFnmSbL6!XR|F4j zdT!4s)AxQiSJvb=n#;AL=HGjlwd*-=7FQiF!~4VascTJD?q&LGuPP9|rdn9J=lXP} zo`*bVUi^E0(d{z-^~d(iKSVDxzh3!!@8aG&hb`uwUUqOcQ_br2cmA~H{yy2wVK-qB z$2QqY@tD+S*Y_wo2z(Emocgo4hxssD&@m&^YcJ32op3lcOuLUE?D>&<XEqh3NwD!e zX{h|e_R2OS((PLPI?g7R0`o0?8<&e+GwF3b$ZFJldX4Vd4aZ{d|LVTTdEn;b8_`w! zGS9r0P@AA0Q}%W@clL=#GUvk?cz<&ooGgE0pUnN=YL<MV^PU>XS|l;Xux@2P%fGLe zktwyLsZ;u7WWt{u7p5<vvli?4=N{c|>kt^R(`WbUsA=~-8x*384%S!l@Ms7|pL)4| z-T$gDx5DQi`Zf2>W2VDQT{WVQ;$Gi%<?Y-q<Z%D*!9ry=)+s*aKI;m9OzX_w_gO!; z$L%9)*ME^2TRP_~{rZ2eW5c|jNkTjvD;SUe+q^U<|Mmoi+H3EQ-+H#}hM~*?wp-7Z z-}-e+cE6m^f!JFc&YI-OwlQDXXi;BwKdNY&$q^pT2S2vFv0!5k`6@Lfa-OkDgYC-@ z(>A6nEw-BbvjQ4+Ti-vGb1<M`){9#+Qq$twjTq%JXHR@_ETCak*M~DH;?w`OGymFM zHE)Yw@6mvUUEkPj1>I|7zpZ5a`!#p7Zh!8<fQDUlRwq;ErP?2;Jt%eY(~Eiokp)^2 z_0J-|DKa!L2rxJ>@US{CFeorE2rw{kFfgz%FfcJNFfueSFdzx1xYvHr7GPjn(Omp1 zwZuo<v3l#nDFPO~k4zLrWPk7+Wox^@ch<z~^0_7YCEP1-39vFYIL-Ue7XEUH-K4V2 zWz~o5f`UwpZ4NmwC`6yy!JuBBHSe+LpNB^ZQeKM%D6=pWEmErxmF1Xa{OUpcdG}k9 zT~isDG&-!-U6A9P<-c)Oz{NxMC!RYB3NUyGe=D(D*uA7;-H9&QKaSg2+a?A!-j{G> zm>Ikz+R2)A&-2d@4Zgo*Vr)=ZVW6|z_SW-Sp+67jGw~i=@5J!ncvE)AqQAFp+ST*^ zD>(J_v?9ZY;Dc9nKX@H{>b$Q`kcDBN-VXgsWxg}wo9#KGLz)>5s84w{{gU6?63527 zUnjSgWI1zPmD62zu8P}oclC<nw>;O1ZVi#DZLs@uIE#aUaY<M~c)%{Rn1Bz$$IdVO zJio>>{MY&m3>R}X>+0o?va~uea6E|DV_Cnb-si2&d9jv@Z1!Q|ZpXv(zS=x}FY@Q% z6*<jiFILZftibR=bL+wE9Zjdh3Y=MNzuM2<*?DV!))Ub`4^z(FU||&SxGxqXwxXhu zwfy~K?UfH*Zmwvy@6g=O#iTG}-@<_HGbXXFd+_d0AWLYv%yR8;HkS7J7w=#9H@qdl z!LWxt+C!**SJUp?H#}ND+^u%X>IF90&skgU-_CHrn)SQGg&4<!>8$4IkvcbZWf!r_ zGdVD<7rm2no@?EKCh32ATd$i`>i!U5VDi}f;GbES)P9}sRUZ@?SOoIBH~mZX5{f98 ztbTs^rzbfVx!xUMU}<15y0J*7>Y%Iy8%qPjz2Cg+4m7P6uiyEA?+yzG1EY)n4#z{= zHRLPObhn0GtJDV>T(SIt-(<govJ#9STNXXA+v2dLsX8^G<zYL6fWrl@b?M!kELgX% zzy5Uhayym=h9J!yHQP11#cDVh7~SFvoLR*0Y+F_JpAF>lqvA0f42(xKcbq@9`GFGy zhr*HvT(Jjx>;F4ii01#iQO_#Q<iHRLR^-NI{Uo%f>2zK5?ZT5fe;+tAa2V`)z-60~ z_5OWW;N_ECKUw6N92zeFI=V>Y&Z{pndOkurI|LY*DqfrK`1t+oq`HHx3<3!j@sf)& z<{t>2($1Bay?jqIKjRhUhAeJ9mVoUHZyvS9-0hy{Ez?rZ^8fJtVpj9@L6HaB8BU2c zh~9BA<eNFE_+Tr;E8zt^tl~^70vSYNI2L#@y6EmWmiCoJp6Nt1!?vc`!doV6V{2RV zz=@%hv*6-}SwW`8D!~P*k~JI({){))Z)%ZI+?RakYSZhI)!$e0Gd|H|sDAr1z?vIm zWN<_BuGYm|{~y*@&R)5B9qYk%hEJjgG9nJwyM_xpiSF)G`XS)(k4c8Fs`2~e{SW4v zfNYIt`1bDncbB#+n%%bFqZR)MIDBK8@^bpex?k62PB?#1Y%pT6Sl0cZ_RfP9-#+rJ z5a3X#Wwd)*>2>&ErnEo}#{wC~A9dg7Z#H2A`BYG$c{#(*?D|KF3@ibC4D4HqD>x_o zJ(TwIe*i0!Lxba{igk<|);k0?C^jUqXk5^L_Sf{q({8mIRxZXViVU~e1P=!@Z2QRD zogm;~7_E3|>%%`~^{)<{D0(Nf&B=iwl_OwP{Hg!$`u1@e=VW(-l20R#uSGs*P@R<L zvf!yV1i2WW=sRpxtk1gA9;5jw#GGTnzWFZGUd2C)?MSUGWMye!*#4+Rujq=9$D_PB zP|DFb8nkP!?D0ho4Ets3v`@X&3)-_!gvo&+em<Z2O71m^3@i_74=+~q+9ECI8fmY< z!NB;Z<aqwB1Hy~gyEoll_+b$b<CJR0HjV9j{O7HI1LD=XUV2b(x}wH^>W+mP_WOcn zx=J#wcs$9bY}t$Ju9hJMfq83J1ov?WIK*CGa*buZP~4Q#@b041sXx0J7_U?YmbE(m z2=%)CF3=&cjp5Z^&405O>EyUtW^T~<9zStDhk(OfrkLm{t!p)w+kP^-DyKPZItwU~ zF4wqz${Cd7);(tmpHgqU^)t&`i{6WE7oJayUJ^e=k%47LX<*#J-`h`^YoDroT{iLZ zvkA*M1Q?ilQeJ=cds~t!mde4v_(SBWEK~TD%XK?jdTzR2n#jQ9z+iWUb-&Z`CM6BO zmbKTf6)pbn+Q1-?P~uv-HN*AhwKvBX@h~bhJXm{ODpC8CPC}jbDFFti`i{^k<(#^w zCdYlK4Qyi&aCmcHgIo91N`C!iv;L~rDl@V)Fig@rl^Ul9QeDyA%~lvTh5vkQ|1K$= zdxDIhB1!(`iujYi=WUJ_d-_hU5M<|p<*t#&&J#E~g`WrhJg59f6y)NX*eUz3>{qFA zoteAWE(+w7n(j}9^>>|aiAiY91-ordcTxIYRwf6A%Am{$$7<HRy=jhT>#Mg{XrGdK z!;)JTCC9>Gr+rG(srysQ&X8#pGk*R4#mb$awPN4n{p^elD%;~Wi>5w)=;X*Wr}MW6 zlfsmL3*(k7+Vg+q_7g?ll-_@^-d$xQ&g;a`a`C)t<eatFExnWLPh7ohz34;vwXFfa z7N2(ivR#qk!`ZG)ie29_)4AWVzcE;U?$)!}Z2Pw#b`#y*cd769f3rvXIT;(?bbWeo z@;bZo^~)1G>Mt*htY6;$Z^yH~`#&5Q6y`2kBfM{s4x8&QRRM+{yEWQ>`ZjpSxHmE! zSRW&_P^16Vk{sU^&o6T@F&xdQ-}}tDO)aL-xP?LEl=8DFd4enqmvm26#svCteDMoR z6BjhoD##OXXmtI_Ef_Xs{mrz4wYxUVUE?dja3agqGGpF@51YANZ*bo7nk&o_VDTnw z&fQrv7jxN1ckWAxSp4Fr1H;q;zx_RYY-b-@9ok%8@yOo$rsHSZ<quXS>IpcsUa6N@ zw4&vA%8BP*pZ}NWSB1^&{_4HLYrj+J<^~3bs}2kdj0(`!2?ui1#DSIR%k}MNx7loC zb!J@E1ZvhS*uVO@=j$sGJgh6YUJDmqxt{son?ca_l9}<z)`bkF7r)hP>OTGNuup^G z+}C#5$DmEA`e&Qgr!%qK5b_UA)^PB>G3nFlh;Oz`U(%*MPtb7i{gM_|W2n-wc}d;u z%sW;*Y%7>9|9yQT_LhXLio^V^zs=u%F1u|Yv!IJ<kHXbwdF6kyJQ&>k-8?zln6ES> z-`_du;2nO>2YPG&ANcd&wuC@{$urN{9o0|k|Fbb#l-!k<F;A-ZaJYE?-;udHj-=i# zFlJ=B<I3y#LxiEL?w9ygRi5*IOqmK;ZcXOipvExe=ezyOcg#Ay<69XM%Z}Ai)1v3! zyVu;vsCrRKD8GFA>}hfHze}?u?C`t(_V{XnfHSMlAL)H^X8q|sk=OFI7^+2!WLDW^ z@A~e`BXFYnV)y9{#;ZT^On+Jb{-dBm!x`DfGLouSearXvIWkomJuBU`T<qF}rJoz4 zpZ>YVw81Xm`mf^O^A>&fO}>A?pz+PTKi|GQ`kXiUYx?%nKXO?=B)pw<p?bxpGd79L zY}_fI&%Hmf%A$O?`u`KGKcv=fUSM|mm&+VxX0}QHmR_G6J@=eVvf1m6$|t{hu>Pp3 zzZ~QGS$kVcu=ttBA2S(LzFm2KFCfSBr)lleWmjvA&U!bjmWW~9TD{Ax{$4^=f^8fB zAL*KRiFdxPPv%{BxpZZYHUE8^ezyk4V^;pxRc{1$pIV#v(N84xf$@$tTkWP_$oALQ zDi=51u$K3GkJ)i27Ktb8{w+K0zmw}#+4q{FXCYOf-c)U%o4R%8qSRAqM)qI&mQP`T zb-<>JzkmCp@1&`fo!#W)o37oz^EF(r`o7q#cte&Q^WGQuyxM+a+0NCv6W4V;+q$mi z@ot6>ZKwH83!E03zLI@?n)j7GRn80yDTn_vuALyZ@A|thTnr2h44$rjF6*2UngHe3 BxV!)W diff --git a/assets/ui/button_delete_saved_game.png b/assets/ui/button_delete_saved_game.png index 5e4f217689b11e444b7163557d7e5d68f3bbfe7d..4ca5b749c208c4b7eac2a4b141a1bd918d7cb98f 100644 GIT binary patch delta 7808 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 delta 5772 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 X^x%nyFEB7LFnGH9vAV2tN@xNAHkhAu diff --git a/assets/ui/button_resume_game.png b/assets/ui/button_resume_game.png index b2ea0a02d05e42377eb551a4b51428b511a32f5d..2fe433b7d18a39880a14e3f0af18cb75c4ccbaed 100644 GIT binary patch delta 3374 zcmX>t^Ga$$Y(39+PZ!6Kid%2zR_2IYmp$&=<-xfvJ$<7g6BA3uB{P}MMN_PoYH5Zq z`FAldsyRK)u(z`%AWEuLz~kw*g}pAEyso~U4Da`C^u5^;pr94N*StXYdoG`_!Sc6k zJ%%?LK7Ral?-uilg=sVAem!^l`(Lkk*NHi4Z~xZW<frZbT<uvu<&uiTw5vZ<4=^ya zF*5KlGf1#881OJ8NH82QU}#8WU^t8>5fR03qkMbt<}(xJdTSnBJX!W^^O@<kRU3{Z zPcZFryZ6aQ=Y?pu_`HP^{Z{#@Rh3*$u{+RL*(tlZN%p_O@Ba;1GbaDI{=l~_nW<qF z`*G9y_TCHaI|45@x9Y61m90FuFM$23!sZ+Mt5utl!wn7Yy`8rC2j`xf8<ZJZm{&~h zSLV3?e^->@nefGx8@<XL<-fg`*;M%E^P8RtC(lPzTu!{ru%)GbZ!besUQ&AV%Cfi& zuW3Jde*gRLQkaug+@8b|cR-r|HdBMHx?QJUL!$Wxf%<<BCQggCRBWxiFUj5~8#l>N z-}n3TQdfotC!8~82+MFOe0P1n<j<882bH~LZNBYQmE7&&KWpEILKa2_n=g6&XSaU; zzuobfOHs~x!HQ|~O_LZJo(8`;^Ub-1kzvcWFF)s9J{VjQbZ(vIKCy%G|62`t{{OwV z=GDPQ4pxQ=0fzdXde;|wstPh#80O?FGwgVM^Zc*nS2Vr%aIiD%DE}R({=duj!5Q-? z>%6FMpYn1g{{4<!nUxZCX~m*%9Gnaf>Ra`XDP`oGG+e*+@v>i^<9mb|bl3OKNl@r< z4`4X3^#;qCKi;p?=RJ5)!BjB+|Fl`D-<%Vkur9DtW5`G;T+NU&Q-60o3&T5Wx!#%| z8r$;|876ozMC?1WK2~XGGb?k03(J9DGRgA!hm>3x9Q+vGRjxfg|GIP{6T>E^1F@@L z9sGW|c40~j7sCmT19$r-A2%qyvW~G~4MW7er(d7*J04&FvA1S7-7;mEAj)vsRL*ur zH<;ZZ#_oNi^^-P-EW?C)k%rw0IYEDaG7H!-C}=XA-J1Pxv$}uWv_1hQ21&*p(YyJs zYX$6PW0=I0U@Kcb=X|7-0%OAzhCA`A19}|dS%eu*a4}?EXK<)u(3!5;Hgocn*}o;4 zxENHn?F_$qlA}eG!Q$1Hlgm65Og?JfnEN%MyhV(`;?Y!V@62~ywOhQ)>i2mlT=^8` z${)W%`4Bh5qEE{XPuIA<@>ABYSAWhf((Tn-P{zw3!+0R*;zc8?ifdUH9d5k(_}sQ# zfw^G?<AYt7FL>DBDwy+a&aRjpw@R0vImE*v#o)r)u=JGl_Ln}z=5ODKzjFG?mUW%s zfFOg8tW~t<@$+{TV%|nw?BIXM#t_I{pOAU?A9u+GeS6`zzY>&x|NZ8Eg3;j$L&4ou z*$cSs?7ga=aFo^-wEyo5HsZc4P{tr2$}sKJx@(tKc9#cS71&VLn_0%75XGSL*1EWL z-=Eo~i>|KgUz(M|)5OoPh^=Au%Fatqt^F=9UtX^j_tt9n0)7SthQ1Zw%54AsO=r(M zHl?0vqQVO2w^9rit1gRPUs-?A>|);RxJf(9co~uw<Q{!m^5f0cMY`SJR=6ctfVEDH zRrv6_x$d%))75pM%`G8wzpyYc91sk>dWAE3x8JAdwXzHh4DKO8VZODGuC6=(`Iae2 zTj%w4`#*0>*qYrdQn~4jBLf42h0?_A>nEk^UotT;G$;#gDT`hD;@KIOm9fkW;x7_1 zRb|b~_hwvYR~JsaWy(-6vEpsj1D=mr*W;8w=zt7-krrFKqwKEj@_-$gWm$e6j37sF zM(y6G6!lh$VMk20fBdq=^?%DRPILWj>-IpEfq_A0;)Si*y*8{23=NyNzRp>gb=~}@ zTK%KUo8G|;3=9r$Z>4U{W>DC$O>Fw*#P@3i*M@DpJv)_;8D#KPbCZjE76~b4U%z+q z^gOVKW7lS`3*|8TwpZ=m)@+6e30j)F-Rl3agR;O9Q0lDscQ$lU;|ABO&CHAp3<X=t z{;GhIsT+e%Xvp0q_VM5HUzxV-va8=AwJ!Fz6DZIMT-d$VU)cD*Gjw-YX;IVD6dRC7 zuWE(8wen^^6QLRRwkqh~c93Cf%Fbqs#@4HatUdG*l%ry%Ydu{T%gms$#x}kqa(CF~ zGZR4}yr|91FkAFZj=+Z9I!p`~!b{d}>pQ1+$NRE6x9Qn;IqAJM+zj;$4D8vWhkQ5h zo--@;8_2VPxi%#e_gMr_$Sh;iteY~^m4TsaN7%>bUyo<3zy4qAkTLsyCI$utwM|*q z_2#FA%f56qWN65F`DAJK7x&L*J1aCrBKJx$I0R;Xomaf>j!Vo%Peuj?hTKKb<x(&H zn7U_dzaC?H_8kXEOe@^CezUPh>koz(2QM->tckmrEuUNNz5aza0|UdYG|rIg4$s%x z^{5I=bNJM0U;XA-cf!92)pHCC3Taj~>n8dAxXWf<FR_e~f#Jc9eQWlK*6q9TRK6wF z`+MsoP%v%b+L#f$Q9}B+WD4IZ0fqyHAJ@jVpAkx9dwEfAU%>Gr3=HWF^*g+FXcn`r z^!O@X)2!wrE5&fc^-trBNY-kXYK3P#bI<-_U?>UyGx0=fv|rbEk0owRD}$$1Xv%f6 zFqCcmTfr)8n7%fG|EP4z{8f_$Mfi_0Gwj|K5vlwrV#;ZWZYG9BlT0PFle;RKH}0AI zDOi&&nUTSIlbiCl|E&d!1+QzlEvVN&n&HBb5dQmo%);b4?P~=wuIk4_Z7uqeEc6&Q zXa^o&+<yJ%;;vi4J?`ubWg+4EPuL{C+K8W=Jbh_!&ICq=H(l4K%r8#&-D#R1_V*|A zEu|j}3XY5gf48);|DLi)Fg}`1o<Ze>*-E|jn#r?67#^%y)4S=nU$o*4mvpB~e=B3_ zAB)y7OkiNh(bZe-d_Pk8R#E!&aDKkt@(+v+2N-Gs3+Mh4&lT4FA^vlV*|Z&Hd7SnP z0zRhOqh4{}bh;{@x2o#HUk~{}76yg~+F3bSi%yr%S?2H0&lw*7;m7By-G)CH90V9r z?(XJh@Zf8Bv)i1B!ISZU=~LGE@=Na)bGdTutAG6aI}^i6h68->7#yM)_@=}yOujF? zdfA#+Pgtt|AM2K?VR*pAux8e#gs-iuyYkMZy#B+ts9m1nh-b~ISq-L7-Qwasu6ay% z;jm-q5N6o3?9ZRst6id>=Ldd$aKMGjjv*tNp=I`_Yi~YJ%rj$WU^u`W8X7FVPII}h zo3A8;2TMbJXs}rBsaaVQCajt~uT!puLBN?|o9Oh*iHojIG2H|z04A&cU{GLVm?O4n znarLg5@~)xdGC@pwaPPCEV*^t>DrXn6}5`G)tOyA2iY0;7!JJVK5P2a|LE*Z%O);Q z;j?4t5Ng=F+;xrSY<3&B2dXUc3^&*ggzjGG{?6-S)+vSq^{EUW&Mt6Wt6BZ0Qm#do z;Raj7b#b<H0(qxyxmicEfs%1JySMhs9XnsUa{u!T<=@v-z|3%)A>^Jw(W$7=9m{NL zA3o+VW7xpj5E}fhbCwaq1YU-Hl3yM~u6A9m4=!vuj2JfXI(SB!emyI`ZduL2-r#Et z4Gs)z?nHVOhu6PZ9J{IY7SFD*X|s$NIzGDHZ2J27@Z~AiuMfWC&^^bnsj@$drA>Ja zgM-=hlQF?;44;?+o_|TZV89@-eA%4X3+xA37=joVym&I>dVZg)0%JoC!-8cz3`<xP z_DGg^r6o!^aWJSbE9~g}d*`p99fQDi{zH#~g3Zowf-3*FJO%a2G4T$ds9<y0vFwiK zW&>tNW{`oeQqotsu_-4oIG8a61hX*&F$KJSc6LD`gTU>x3)IEFIL%;ah+&XOk&k}e z@6f@}ki%edeM(?F1H&Z70(R5XO2!pk+zf92zQ=C56S-8PaUVy|9)>ynXa9bBu;*Ie z>#xuGJBxqxf3RY!Z(?HjC%L%rZvK|Cn17mCd(4{ou1|3n-Rkba;2;#uq|@PgLFwk? zuG+ghx2@4M*7upa=}310LqoOVl@sO3A4EbbRmy`Z6mDnC{m<_c%*Md~Z;{HazSbub z4)6U@u54N6HSMR5_ePzthxSV|j<g#vG=#0qO4&2nT6mSEqUxpO&Gqa5tEA0#T)d2j zL8;9_UEW$?Pg_WDPvw-yTEg5R|EAwMIP24;lKQxC7KXYl`rlfuHatDFYekvT^%Jkl z;xf|f@0tHxz9H~l>8*tljp84U9p1*UL19Cs+KzQE4$gP^ob>aI%(wS%wimwn%(G|y zqGdepya)C^4JeS|zIM=KnvBkm)_OlvwP=Q#-9O|0I``MkWUVjTKIf?agR^b2tOs^k zFG-uJY%BG%p*7d~bEKSASz+WO!xK{5VyaF*KL1*_Tm0T(@mDLP($uW|<m|OS++Ou& zzxd(mhp$=;Jk-)MmI&WVu}H(!jezzq)EQ7a7&7+%#T6wvJ-c(}eq&%@VDNPHb6Mw< G&;$TE#MROO delta 3601 zcmaDQby{XZY(4J{PZ!6Kid%2zRz`%T${nBia^}zMd2Rw*k8bkxJ-y~+(B>^AL57=W zX3npaGxQ1GbVl~<+BG`r(LTDGtfDRo(;aR)Dg+vai|AR4v!?ER^F8jt9oG8dd)gm% zG=8^TFz4y-<InB&`S;b>Ki_x%^Ssad^jw}WHH7UHwf}Nni9bBD{zdPhTg$$G3Ed{T z%jk9%Lq+1vM9HK`A!E}GmeHGpAM_P1{yVj&C_7-%y;-}oV=t_?%vd#BHqbrz`?X8; zPT4Pd6BvF#wEWUK8ghKo)D_#8Y+4g~?ehMJZ@YXN*cRQ}Wwg4!WZi^~8n;p^H5bf^ zyTf;2ZF}lj^<yeWx^7;smt6BNN$&m5xlCVt^f$M&%*oTJD^2J9r?9}g()Uclf*D77 znr$P_Ec?Ay<N^P$tlO71_$bOBWG@m?v<W_;y&@;7NSmeLs^pu%Vx=Bli5!LWXD(8$ zmzQpHG2DFD%C*62(ZBX{k(c8ShstZTTtCWGyW>RFHopaRvO)`%T>BN`Gp~MvH7BdM z2G6vc5r(^y+U8GDVc4v`@W3Qv!DdbouG4uw>n22dUzr}>uwTwD-?CfVKEO(!JuEnD zqN(qhFLV947ie#9-7nf?X&=Cz6R5lQjM&2|46LEPpT%7s=J5xJb075)zh-iF=S+rm zf;XM`*mzb<d?BOw`_}En;hYmPH{>PP$BRqoEO5Igvi$2zw%zg3OeOrbw^tl@U^Lwv zeSO9LPZK-C7>l&tN(a<5-b$1_Z+PQ+yt;$azNac|92t#IoK9<g%ZXmiaLi5WYv!Vx zJqH=19&A=weDa2aaun-{b(?<g6KZ+Me}V14*yeeu8}f2Q6`sy9<z!~w(lX=ckub(@ z>D={^5+Vy!m5N%<h%r|EEm^aVr<rNXk!ixbs&C3PgcE*jVp%K-66va#?0V*3z_%Np zkL;Z2#=~_%<n!X56tNSBmmcw%y!Y^H0}Y4Z4QDpL*)4MY*7CC)%?u9FAg(h51ET^% z1A~MJ10zEN1A_wtg8~DC00RRD0|N^K0~13%4sra#4d<S;&esdN-^zLAZnpYPKh7n; z?K&2u?>qhUpJnp)DVHY4FT1!{yZ=%{f8ApDY4VGXhtFM*e*Njh<JY`cxR_2D{!zV> z9Hmh@Tc)61blqg;%p13Sme(D7A>Y07eEY;FuTI+S{@b?0_ogGWn0ojBZ5#)i7(OlB z?|-TEVgADBTLflpSo>G|dq;lpiP%5SGPHkOe`KZFz*axUOYYwfw+05IhSoj0j1tP% zU*G=oX2R9wxAwl;?tcE|{tLm`=PtCo4dswxd0`b}TfRm6Ku3Q4rrUGAZCJf?%7^%q zd*8QuzLI8ODp|?EukZb`;K%wWjXMoZezAXH=2#%WSaqK3eF$UJuY(P$C%+szpUNT6 zGGRSK&b@bbraLaPX6#LVvbCA5zG#ZgwlIYj0f#!K4Zr`MWBIwRyzIh{(7-RhZm~%1 zv*@X+VlC=CkawQ%=OYu}8*TNAco;=g7`T5eyWwMGdh3Nypmx}ARjX;~3sy?kJr;VH z_ulr=`-!a%P7FV}4;-pjS^j6$gZmvXf{&V%TwEWcwBhKs=jQXA4HO${SSw!7W;W;j zKlMJxzfQ|97k)21C!XrRQA6Kv(MJ2}N((?PdgF7lJgPzLOjGZ^JF}m?;E8dqzqxTy z&mtbi6qSZ`JKCZf#JaT4niL0f?JQiQw|UW@C*tV=QxqFMv1U9hNfh1t$5kgjaNf@L zw%Vo686e>un>6@8b3Tp^oG0vh{(r+F9>ymc2UP1g-#lt>;ur03{VD#ud()5V@38{z z|3B>Q5O8Lg$ywkzi(`#O{ciiYRsQAm|1M^K<2$tAX?y0L`HYEe3`W8Zi#Wtrzs_72 zuT}cILTKx8>w{mupZB}avR31ifI}Wrhl!_v;%g_}y+6M)uB$5$?=oVUu$UoeKd(fm zr0SP9?!PU<r!0Q4v$vJQf@Q)?hUr#eQ`l=B)C9hJw)1aM;J=qlO?-?gY6srxoXTf6 z6R&?-#3ILZ!iS+#X^Mx&sW*SwL{d2v{25icCe&`c_OU?je%GfwkWetARlpQ?-P`9? zo!)={esRTDRsja46Fv=mB2V}3pTGEEartNQ)cf3EL55DHE75x5Pk-Ng8X3s9q)~op z#wHDChMn9Bfh}B%9lV+PC;q-&<N9-B=<#}!t>-ma0=gK4Tu%sgZ@T^~W#1wjXKPnU zCJkSPPFG7$om1yMHBKq-Ki|$E;E={tvO&Y%ten3*Q0{Rw52HfE8I~7Ki){Q-T_u@T zI5w=)ICWb~fdS<2pzb2ixh;#<^qt+K&>+P+A!5qp(xqSi6zyANlkrrLgMl$cqrpY+ zM*V5)H5&GI=YK9b^Ub`KLBL@ilZVK{gGtNRA3krjb>{Th7RQoBs?4NVE`Xf)!*`C@ z*NWfIcE^2>7T{-8XlQycp`ljTVsqSqzQrKjr9vCbFTR^ExaO1|1LGDQhIWqsB}v-H z|Jij4FfgqMZb@}KKKIr(K_&-=P_GSUZ=TuKKlpc35F}SD^<<~s%V*_HV#k~rI2N2! zdUIy=wEns|T#O10zw(-oEsZV6a;>;hWy{jQ@G6R9wOMq=iKe}NZ@o{Q3vXi(a4>zS zzsltD4*x}ScKzayUwzoifF;2F!_A+^ZQ6g?TIf%UyVKVGP@&;av;NbF>(zVemwx<r z%60*BJ=25M8Q1PUb<^Q|UM0TZ{T~ad?Mr#yGdnP(?h`s`v2^_s&()UxYrcdXznvi9 z;LB9N_TTC1Q`u#e=XBm#>R$PHVD_wYI&BPI;t#~c@0?EOF_Ay^eEq(|KNK2*SRe50 zJ9_U(Y{AXKHGjor7i^sEz0pvNCE(e$jv(&5`TWYJg$m~NECDZ{?dX}Dbg=g2XNhyn zCg1KA_$V;2ys%=lXpWD`bUWC}pe5jtbnva|)cp^teuQRd{Sa_C$K;{2<8S)H2TlyU zvXia{70i$8Y2s#_qSMgwV7|tR2YNfcpW|AbzVEc_2gQaSmI(m`du#bS|LZ?*zF)k{ zj9ZUo!e)j!2iLFMexY7nQGF-(yT#i5liKT55AiXkC>?mKu_Kr%<G`bos)x^wT4b0` zxG->j{_`UEsNdecirRy={RPepGdUDCKJa^@vtw_1>*dX_0}2!y=CDloz_;#6({5Q- zai$Zl44l^b1>!OKA~75a=8P7CIlfyAqulF1^En=DWw<4{;HktS^=F^!MendbKYr<j ze79f>$ATEfzUSc=y63xkYwW1x&|!H|#mJX7&5Ntfap%QC5l#PtZ@<3NH!1PmmGu2i zBZHR60rdyvnXK2noetjZYT^cE>jO7;uQ-^sKl6ihZrLq?rHk3q*sS9VY?(73TxvEc zGv?A`nXr<fXQRA(kY{P_Zg#(V@5qC)f0e@u6dRaW3S`(-;%=tr+xa-Mf7bkzBADBC zc1h*Gl_o_m?L=ZY7UVD<%hi0&wNa$X_rB}lf72VAxEY_QGjK1JcF%lz@NTxc?Z20W zpKgRTGB`2J<We}a?a#Y24|e-<E@_{>Ory>?l4F6vuI}(V-&iuT|Ji=}U32{9^ZL1h zb=$f>&G3yl*vb&=FrR<%EuQ_e(*=4zYv+I7{8vo&MZkyZ{rk@=3N^7Y?&1+Uux*)R zbC^u#_sw$uM6Z-P%G4jMEf?o?J=n@n^zh~S%`1*?xv+ZOpXO=uh3_P*439L2%avwX zUAe2>As0FCkpTO{CWcK-wqXWEd+!-OPv34?UukcDZ2Jtk=+ZNWYhN1b9{Cty#Qo>4 zaanipQWmLAR=vl5OA2VgS_}AF1?X)HRMicATmebTPTqScz>vW`t#VrJbgM?SbM?I@ zNdXPZX2_?iY<74Y+mZ33t70=NQj15;;r!X-(q4ud4&FcJW@rd*zCV}q!6yCa6NeTs z=n77}JLBZ0_W}<tSY|7+v1W8SKVQop#d>1ZhF|-HLYf;HXFUitd~G@P8}C{s3F*uy z%RSYE+1N80&rkMUwu`N5S13ch8@MsYo&jpiot$=OJJ*EV4YmKnIF>m&+}+TVF1_aU zI$?(+x?ge@%QdrHIU^UF+&H83yENy6NvRut@9)fKT<~ah{j!7mo}M}rui9{8uApUv zFvBYqv-6Ww)AmGHGwl$$W^y)CBze{G21e6|!r3OTwbyQ5fA)7NlY!CcxBKfC2{3Q{ z;8wt!I_2iK`x>v!MH+ltgSyvb>a!<(XxNk}X;*ZwD(cLa_zISSm6=QIKC(_*)5$2| zvcN~J>&O$%om-h~Z-kw@Ez%Gelr1YXUHyqq6N^J*_`e@DipK+-{kKg2SjL)gh4ae$ z50$5HUT?n0*--TC&m)n4KGorM%ULs))knMS)Xj=pvXYURC*|L==>^NKh#jt4V|=qL zjDh{<RbRV@kxp{^cpL5{%)B#S^~tkvQ{5*gO{O!P-H|>ey8N9-wnkO1x(h?B{GSEJ zy{@~8Uh{pk;Lo48l;gsoyH?Gm-ahLl?6bJ0vOuHxHtXqImn?#lWA;tB_b20UY*6tX zLB^>19gEl8v-1qk<M+7~-S@^T|4M!7g_zT2vu5ntKJA}$)ME`*h7X4}9X2|$X^Yv> z7*M0!UvG<?*!pjcqF=vFKl0}9#>GG1@-VJ@>aWDCCH-doy!E-WR<7T)_QKSgVax}( xPxGA?I6Y~`%Jx~Cudb}zE6T*MK;j?2x54ZZgSeV(1_mw$22WQ%mvv4FO#l;cWDx)W diff --git a/assets/ui/button_start.png b/assets/ui/button_start.png index 6845e2f5c21598ab61f1684d2075aeec0334bf23..23c7a4f670de19ffac455d6c510c3c53653a048b 100644 GIT binary patch delta 2995 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 delta 3943 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 diff --git a/assets/ui/type_pick-image.png b/assets/ui/type_pick-image.png index 216e7d24926beb60c9806f5404a313cb62778ffb..46d5443f799230410d84a3477112b529146dfbfc 100644 GIT binary patch delta 6824 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 Pz`)??>gTe~DWM4fvI~<b delta 6006 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 Yxf<>)pYp+jfq{X+)78&qol`;+0Mjunv;Y7A diff --git a/assets/ui/type_pick-word.png b/assets/ui/type_pick-word.png index 8c816e62f246aa7fc2762cae52090547b74cb1c2..a3dc27a934b3190251b769601d6ff69f8f02de44 100644 GIT binary patch delta 6881 zcmZ3X-()r+wqB~=)5S5Q;?~<(&KaUtXQsNHmFSi1ojh~J$r(px7EbCp`64AL%}Da5 zqYLY<o8M#094Gj?2;4l%>d3;nsN+$S67LtM^35i`o8NnzpWXM~<ab^1`P$I+udlBD zTDo`H^w0J8e@?j``ZaIwFaNvsyZ^6MXj$PP@Kp4VAcs(cf(JuWy#gag6N>_rM}JPe z2SXEHTZJ0znH-q}SU4ZFxvNxpo|$|@rO>Bh`fH(fm1`a~iWj{e$v-Lywx9k&&oDe` z@sU9J$9op`7Oy=LF7#IA-^8w<eVhTYNmDuE9J=yV>trvS4ViSJ@32LF#*+WKqRVOo z>lyMdnF!W13aWYEk$voIvqW=+zGeNxC>@s>Y9F1o{BEirn7?<H1#9~Hj;XKvI@dpc zEB06|S4enyzHt4|r1lxJclqbsC<=<%S9EuE)7t43H=gtUaWsy!Iepaoy6gSK)h=_x zxR0*jls?is+x)LkVs{!}P~#~L#(9%>JX-PP`MR!p{e8DpZ+(f;(YiWYf8Hu<|B&nn zDq7dPC;j&mnkqcmW$G`_SD&@MKJSiep5A@sDErZ?+2(hqaDV%?zfz{gw9~uJL_Fn< zS;0;z@rI52|6SV^k+ycSP=8?KDLKZ3=kqpKzY<?^)1dNLS>WD>HGzVs=Kh$wV$O%T zE2bFeuL*Gr@zbccS(dc7a#7sukcm^aoqxM_ckH9M>5cYUg}2@@$=A)&{>2}^Hf^!+ za{YFDd854Cik#l~6Fh<@h5LR)oQv2cV_6pHGh>@C&(z~-DVBbEyC1(eA-uhT!TyTe zs;yzq<_nrit9z&V2Qe_NI<>uezM|!$+pN{D)Bl}z$`4)n<#f2baQ*2pInnubbM>vh z#4WnFWrpM`wR3?k2R1I}>B>~}<ZJ%7&t=`+&Kapfx0kky+Ah57WSICWY~tQe9V--% z_n)ugJ16MgA20GYE^5`kyDwUK3f~-2HT?G1cTwK#L&b*CJ3QKs+z*&|ijA@DrtQ-& zOWBupZg$YzShZRGobcvnZ-TyUssF^6e@A5NthOnuljkoDd@gTa>AA-?b@MF21hqyM z&fLo`_tr6~KV6k-{Ni6;)J^|eKc3xO;rF`r)qY;<ln!Ba=V_OB^{Tt9O<Vcu^RKs; z7oU@~E?g{Lyuwa&<rm=xj4W<z=DmCKvwF%Qrd>%rb^1Yud@{QP{@rGupR@g{h|KlU zdWVc<2fnWI49>c|Ex4@xv3H&^?~gk5%kI;2E7M)xrfI&ao|idG$gpgNncK^sS$;qA z6@Fgs4L+n6bnxctIF1SGh3r#TmIx<oxH>s@=er$7nF}1;tnEuLHg-Iow%$(aUv$^Y z{Is2Af0s!p-(O?JIWK#r)>*;m_-(r~5A5ArwUW8seGT7C^SMSxXA7IRo}JGod+F#b z-s6XjZ+~8U$!XanlUg^=r0`q;t9Nft&i-q0v~;D<(%B5zYwum#70K)>Yn>Pzaq?{b z+n+CgAFhwy|8t3Y?@Wu_>>qQk*@|^)hwCc42>UR{y$V%MKYx31Z|y#*%g^t>oAh0{ zYPb3OT^?&9ihb&5*-9#IUXk1uvGLuEIeWLQtiL{G^MP}=taTg)b5Dg-aegrFT(QBY zKYY{SWz36IF58{w)_(JFvAA-dE1$zzp-cPTU#MOwVUo3VhEeivkMmY4eseeWtvHn5 zz`Qp8bMedIh!b{)6YAHfp0zp2_cH#4;w{NblI;)VR;lO(%(uO5lT!a%S$@LSM;*U@ zOTS;ke^yG?xb^&(1BKkhy&9@4D^lxb8DxGjP|qpTU_LZ|*QQxhrC2V=rWiZ$?0J}e z?%v8diHqmhmWSF1Z@W7A>VDlPcDWn;e{x-!zfa~H^Rn|=JjHwx`)*BOpRwF&*)AU0 z?S8fQwmlCLZ2mKaE7Xef!o5E#g7wSRgygRay0^AcasKDO`*XOp{Te+3r*bYi%TOA< zbk&CyvXXHVH#_J3oB3g9{JFcL|8@sT@_v%Pl`#9q#ba};&v%{bTv%B1DOHhCfHCWW zV#==)`5iV&>V|LLUf{W~<ny8kjt?rLt4f3tCVbR<XI~OmTs7I{|HD?(0{OFNc(t{X z>YoW3w{2P8>t`^9D=p~Oq~@e2KX@0FeV(FWwCB$+uCK8jx35oJ!dUqseukUc%4NLU zrpxF0MAs<%iQUz?__U2@#GTvM_81G!-*0aEWV+35CEuwPKc-lPthnUa@bK93A2-dd zLnWC-gaRiWGXMH+gVWRZeI)|lWi8@=h|QmwJ#$V}{j6e_FEyo=ESv#qjgOD}-qT6% z-T7+s+1vg%HLq#cZ3$G*Ijg4m=)}kFdFOuqxji@Wa>n6n!F8M$rf`L_aa>4$!L{^{ zhM+;1kKUC0;@HCCYckzjxncPdMS6kXAFD(c`@0J+jGXTCv{=E@?D6V94jcwmNg7#K zcLXnc-n2c(*`i)NMS<~@BIAUGt$*)7J9<>mU%YI0@R4P|59EB^F4Zemp;;x|y@|hj z*V@ZGe3>UY>uT@pa^P6tUJ|wc#odK>cmLlrYifa<lADTyr82|4DIBs&znW(r(3q|l z&)+WEzJIgbtC#gUvc9o112wC@uCnGlClV8QKlp`;dgrve;;c>#^(vbRe6O&+RF%%# zlymiB!He>5f9|R{R4N~6?Y@2}|M5lPMXwX0O1MJ<7OlFhv*Pdi2y@LvLR*e6$a!jQ zA-eCNmE`}6(>_#kbh9}!JW*J6g@0!1-}@1&-(+pxTeO)<`*rl`x1TbZmpxN#>T3nY zQ;dvyC(Tn=EHd`&k=U<jrJG%U;@-QP@e!uI9iH8J-8#<mt4@A=V3-|JbjojD_QX|x z8lK%XVp3#S@_oXgn@gvav`u7ucOiXd#{ZycPRr|VK5Dg#T$DN8by3veCm%K{>%N=I zqQTB`V0OUzhwn`-)L(I~zgJ+h>ILt~wa;RW56|EJes9RpyNS0J?9gfAxwJ>Zq^Pt$ z#K|YKa&<u3Ht+vy4saB_`(yg?)Cto?VV6Uqi=-OO|DX6MJvG>$X-csAj>6?7sZ6G? zCke*xQ;?i=LG8&7yZc6=YwlJk9h&&|in;g9K)3yjt;M-jdV#0bs~^rXi&GFwc_Z$2 z*?aq5-Fy2Cg&n5f{e8YGbMvPoH#}z_`A}}&!B!vj(m1Wfaq;yI!B3m}?M_clyJQ*2 zqR4oPi7{c70vAjB_aiGaZp*%|?On?9>%a1r%9Dp~?$Nuy>{pVc@v+(so_lk}_3dTW zS^U+?EPuda;N5;NGAi?nmEeL245^I_#go2!32SV5@pSi;y@98C&aYBwn{&5omeS$Q zt;W(le0l4y*B6D{op8~_DU;>e(?f3#?Js|8o9*7vsKOw~&-BIE&ebL7gIb#;%Vf5P zXTC=Jb@AKXliPOr>x8G9&jv3##nbcYWcbgAj}x`#URmULLi0-Y<g^nU?dz^@DQ>%( zs+HCJ_Sv$=h(xnze|xj`9;^=D-XR(PR^Vs#xhge=Qw9&7`^=qLuYK(F=R~Q!>YO#l zq9czOgLCe*XX=&-KUNuV_N-pnqrH5A#Pf6UTY0smvfC%9y0P8RVDFC!@HBt?RnTaw zz+P{cMYGxX<aV27t-1O%;<k6I`$E|oA#J8PR>hICl4rY~e%Jl9)?NHl@5~38nNJ>r zEqL`zeP{0RnH!R%>P1C9{$F`1a?2;)o<99Q9E(4#pLlN5)ReV0LS=pP^Csm?x7qD3 z{bv3h69GZ_nAK&ULqeGXHy0MQC^>%&%uZ2pNc*NJ%4RATzBq8xDv7J%6B9S?VgJbq zD)Jt<Ydkl!KRcbRJ*z3<`S!P4Lna<t6lA>W+;Y$5J%^TrT~4_znpEHMN8$Bq`R-GJ z+&6P1bgYhBeq*fiKK;+^?H&);HGDF5>y56wc(=g%jjxKKz~4Z{+ta6YJ&#`2DqJ2R z-*eR1V^-snty@_?AN$H;wrP2b{fqsRSG;Qa&Ae}(utD@a(F3)P<@3cCw($uEp4V`) zja}~9bLr2f_#J`_Crs=EulzB8Q$Is)qt+R}2^`hwr>1q>Wcp?^Ei{TVt98QMtNm}k zAM@JXwDsXKMs>?fMVU7Nk8&GNy^%V+J$MP{my*d-R($2u`gdQ+H}s%X`-1ScuxV-+ zt-hzudq1Us$>f7UGw<iZz3faJQU~hXJRPS>yjyPc%Gh;9?9$l}RxWbdyiJ&KSM;&- z_21_P8&<~#-kT#bQ>E#!O>Njbqxc>#R`n}0_zh0IY|>to{r}K8ffEY1WwoE~_hrs| zU9wyu_paH(Z|VgJXPZh-q|IMebvPw-w}>h8KCx3u+uv-wQToi-;+3jsT-EYLvk> z^<Y@sRHb@<Z=SxR_|HQ&pI`j{%-nf6EPYKxwN6a^E16fnC#x<yeUssJ-Rc=(b*7Vy z+4{EYnnhQJsBDXtu(R9v)~WEt3D(_*gLUf~tWAp#hsDW?eqw&L)lb~o=e3wa++N9P zefONh+^!4iT8iv@Zmzzwto?-6!&Co-wS}*{t-8y^^x{(Bj_rHTb3dpKc=pFO@uI}) z$#*4pT5}(s7FHjqn9`b97x9!S;oXADyzpS7HO2dNZnJ*Ab>&;jS^kTMUcS2^?6LiI z;QQpV8|t-tbd$CjZLhegS1W6ALD4DQWo_N&3HG9aj{n0J&E$XjxqF}8l*gB&JsKw8 z;y$-d`oS%R{n<^Tj2G^l+_v8?>4*N_X~~-wPCjCMcGA?7%`8%3we^a9^LD<O@Ji<U zts7ef)u!CD`goUr`;N7e6}MdzFU|FvXQUh+a#hRmp}_eWbLGzkJ%6vsvH$KxKG%Mm zxzkeSSme(3$dI13P=N85Rp$2F{FbT=thwns;?7$LB&_B?x<lp8?@d*T4(rnLUL5#r z_2S|0)wgTz?`E9L%m4TLp+%N@%j!?p`lZ)xPUz3l6D=}(-gT<8IJf(>)~n+xEk?(g z-PZ)2R*z+|zxGy-pFyy@W_kC5GmD}YJKbNBc--e=^$V`hr%~?NZLJ*wV&@coE&k27 zs%T4O*V9XWn_ZW?I(MyF(Cc%ZcM^;Lu}K>I4GhV;=XN?*Z?rtgE%yBH<bwB1eAe6Q zr=^{8F0WJmxNk$o_v8sGiI?U6+P9wG=CrD=?lI@qG=+l`E^d9r)M(0bLh10rZwjw# zS{~QE{T4QJ{yzVsf4;^!<Q+KEFkxkIS@dLG#^ZnQ8^rF9cep<Hg}}D0+^<uQcQX9y zKJ6J5J?HbR)0Uct_L-)Nw|`C$vPmg#=I_4HCOWU4rOZt1NWx5Iu}g<VoUBE6`)us3 z(fspX=(EC~67x-qvRO}XwTpYJ%r1>pk=i?9<-cw@hrexWMe==b>TJugf15hze&>%j zLc%7T3I4a&zNrrn4zm9F-9qrealPk%&pnb^p1b~BwsFf{i;Fv}7a!bn`qHs!3tsj; z7V|96W{(&8C|cjrYt?<@cF+BlPr3DuRL=3x*|XxO!pE)~ES^nneBYZ=uKc(DQ(Ga! zQLuZOzMx&2T#L?Ju8nq|KUmwWo7r?<*f4KW`^^W=4;N~0_IF(QQownobKu7bY2W8^ zRLo&FY26Vn;(x<PLr7=C&iTf(j1->L+Z>zI5U*}=_GnD&$-mm&_3wYqJ^g);4wFXf zhc4?aYwmJ%`fqvjF-tyT!O|7%9Y4hS?k-bZw!lL^+i&aqLbdLI&9@z+mMqYaP6)X+ z$7}zMFqh*$924)mU;S}y&btLMrd^6WRl&xZ@?zht>#aOLKT=_M$p2rwVB44PcKdeE zKfF~+x^K1k;z~ggMu9?^7YWDfuNPbHSK|yQ`naD__yMQ<{k><OS#@~bQQspf5oaVT zecnal&-QO(_a_SkJhKvDs_~yKcHHC4m7r4*lKU?+n`M_N_)I#e6!KVj{obwbF3i~z z7?oDMahX8evCa?AoO0(ltNx2{S^oXJ;Vg$rwWsf&J+}UT+%ZusN@o5OV?FuxJ{#&o zCARE3{js#GnPLBxoTE(*`QH|#E&pHZ(Dna(RGL{vx~yr?V%HU4wppb0393DP|L*f2 zPrmO)PSx|=c*-p7)E8)6kd2zaq$>Yg_MCMxm!bW$PquM&vyX4R)Gig)>AhU|{l!CJ z;Vw0-fwSdYX9&K#l(w{@JzFsNz4D{of^LCR>;Ip#*uzjKnjp8JNz9{glA7A;!=C?_ zRsHaFlkRgj6MM}Xm1)Tt&GhHc1P2YhnQNDB`fKxHe%8d<kET>Io{MtS+W+2G#OBnA z2F?%4(~HkqcBtw-ylfpC_lRA_=pgSJzbYqhzn@}nWZSkLVDCRNXR?#v{_AI#Z!A2f zSeTu%dKpW-s^`zfDHeBLJ9bB|*I=nQ_w<h8vd7gT4|l6s%xQ1h!M<ijt-`c;&b_s( zGORZ(kf~hmYR=Zb$zw;pHP@s!LfgZNV(!^(+_Uws)t+ZA558L5eSO(gh2hl9|DoMq zWWHuzPu^A<J;~g=_}}|$AC`!%D4fKT7|1s_IOM5*jB<dAkWYPqXUWQYZzE#cUY!ek zpBwP@j3M*g9hJrx)cZ~OR$r43k5%1p>djft*+-sgC)#o+m7g$U)Tn3GJt(0+Gt?(g zp(E5b;C#dW$IHYPb}Kl9-`?q@b#>C5!(JE9a-}W(^YHG?=%taSyFOVRu-~Q8;}Kh9 z@XA{F*0R-;-b(zg7Gpc8UmqLJ{p#yom0p8f;pmkeEDke7cb~NnZOK+>co4F`x8Otl z&IiWJ=N}ef?G|Sg>z26Q@MDVPGYx?`thc2SN}4ar|C4dvZn62(^~}8ix$^`+M!r$; z5Wl9~{7tf!Z}+9Nkg8{ry8@jTepGXRuQ(-r@nut~KTSFre^PT!Ho4k<<#}Dte8#}^ zd#v2?Ic?!Pw)U)i`cUfpu9(Heb2uAbTvg_Kyjy?4fip&lE9^f%$&k1${pkPODe>!n z9?uaJ;5=ik@Af96Q+LjrH2J-a;y#NRmBZS@J8m-WZP?)b<jBk0hol=L7UsQf4ST$% zrkm5?=0o#68hf@X96WtgvudMKAIlBRJ*oA(-V5Io`*HhZP4K*f`*gd685d2t?{skE z^@31m{tFVdO@fD(?sn{Vw45iln}v1uUgmpyTTlJ3oqnT!Qh)Z&(wGVz1*QX?O`3-8 zE!P(PUd!P&{eaHHJ&#UntcdUssFO;*DY)Qlw|CC{KWUr^YB#bZ-te!P6kDag;1QEm zbi|2!(e)W@ie8Vdw7e3Ozg~6ZY1FT@2OG_fRmCX#2V`r>T{+Qk>h5>bblIoZ<vsSS zoA`SBp`{{=X3Z9p;(T!ZByWORK~8T+Xu7GCs(AOO<o$;2a*jE@5n;0)S1C5k-(D%` z`C*0GjbCN#3OrFVECsLn)c=HL3#oQ6{Jm=;AS<Rc<^I9?HybA_&2XN2N2YX3!kRY^ zc-R}Ge1nhNEbhymlO4R!OP%rFhsjU0oLtne%{*|KP4Y&(#XOb|7t~s%Q>K_Qv8?># zs?fMxchZH$SG)=@zPHcXY}X#JBJ{bnLh40Ep#?UA2eb~qzW!$8<Vx=Ezdx$m2rlsc z|3+i!TkD*uM$sF#PA;rhey=g<%Ix(bGM;%VJ1_jdQgdd*_G=Rvp0+ZSJ>_*gIqlA6 zvA?dl=}h5FD`Ma1mX#Tr-^;yZd3h4U3zl4wEn(ZWHiEl#7kI9nOX*N&3|W2X+)P8k z2M-={PrGhiq*Jv0ds^&T^Uv>$O*T1y+2yOQlivCI+*el>he!p6GWU!1-i%o@wn=oc zGX^Y5&{@1~#j_GshHbW+f^u?Zwn!<&2$_2MsR``5wX$hSllHV{A`9|Axid{E6xOhP zJ)xrdQ(CCaGdBhSwz~_~G6bJm#ky-E1INloz1>ESb$2dLp2c`AYR|^QER#1!zI}GD zysMmRxm;1)3umS&TQvmab_g?m_+GzCPf%=&g8BZdXIVZ-ux(Xk_@@6s>Kx0(4ZhkN zVv`PhxH|8=ZoxghsVo}#EDo_f;zt`J1^t;8$Q)WNwEwH)!#;flH6_=$bJfctwdN)W zDFj_HTi&*J+Xi|43+uw4n7O1GYh*AbB=*er`LKNR=c(}xHxKx$Nm$>Vz>wO{z}&1* z@32~~wfp<S3N{ahy}!f#SDV-0zaIYU+$*J<S9ivj`A8<}bZ@zNcNrh3N3p<{Q~f}G zi|_7yi`P{uoPYm64rOc95aoLJ<%PsIyA2cU13(F8p58;23)dIfrT$}{W|-u;c;3Qy zwkfVL91KN{3x1qPx~;S4za+>shPNhp)9M45-iS_I8<2Cm?#+$R1>4NK*csXSV%}bR z&2jEvE~vA_kPynLdZ6NRgZOOz1E+snUjO-V9AEE}2Tdinw@nKMkH@W_62KH<%DZFw zPln`8e0+vyL`v#5tm6H|Jf-=-afjG|<@;K#ZzsQPY_;)E)w;`afQ|LJmjq)#U1pqh zJy*TLB2E8;J6C7vIt1OaOEfvV@$%w*va8|~m~E$ozi5(LFmrRcR{Q}arWV%g+k<C% znKL#V%wut=S5Tf1Vie~6YW{5TRg3wKSIGVPSfS8x_ZfTbo@+9(J1Ts?YPkxX?tZlR z>B;HE<vVj9o&At5smicR?}@dbg4_nh1LlWzvhJv#fA{=VX_>E186Bn>U!+3cT-)?J z>0+$aS?6QxM1$>52QLfe$rTM=;gZ_UAi8D7@5sfK53i_bacp@Z_Vl{b&b!|px-Pyt z`O!75II-`+ou|YY8Fb$9UH^M%TV15p^u28BIb<|kqW4=m^#@M=qc6wa-z%nfPwA<B zp2r2j)E<UkZ1wr>U6CuV9hu;B=v*gzSLK`&U4JK?3f{&U;23<2_2`0t7hdgUFUpTr z2){7-mTTA}>}m1Fv5a4Id5yq<9XE^1=7`AuHno+ya5f?Sp6a3M{T}vR_U&r^KUEw0 z=67FsCmYcAbyjD|<@Qa7LmagW-`u(Ab0q(|>zSCjTO$+KJ`4X*FRLDQa`E{T?T59e z)fV*#gC}M1PKZ!<wk8U<aqyWJ2LTlZ#|aE9;At34&J@l+qJj^<3g7+HwV#23fx*+& K&t;ucLK6T0QLd%{ delta 6016 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 Q7#J8lUHx3vIVCg!0HD=JzyJUM diff --git a/fastlane/metadata/android/en-US/changelogs/66.txt b/fastlane/metadata/android/en-US/changelogs/66.txt new file mode 100644 index 0000000..5482b7f --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/66.txt @@ -0,0 +1 @@ +Clean / improve / update code and UI. diff --git a/fastlane/metadata/android/fr-FR/changelogs/66.txt b/fastlane/metadata/android/fr-FR/changelogs/66.txt new file mode 100644 index 0000000..8e88019 --- /dev/null +++ b/fastlane/metadata/android/fr-FR/changelogs/66.txt @@ -0,0 +1 @@ +Nettoyage / amélioration / mise à jour de code et de l'interface. diff --git a/lib/config/default_game_settings.dart b/lib/config/default_game_settings.dart index f6ae267..f9ee677 100644 --- a/lib/config/default_game_settings.dart +++ b/lib/config/default_game_settings.dart @@ -1,4 +1,4 @@ -import 'package:wordguessing/utils/tools.dart'; +import 'package:wordguessing/utils/tools.dart'; class DefaultGameSettings { // available game parameters codes @@ -42,11 +42,6 @@ class DefaultGameSettings { return []; } - // parameters displayed with assets (instead of painter) - static List<String> displayedWithAssets = [ - parameterCodeGameType, - ]; - static const int itemsCount = 4; static const int recentWordsCount = 20; } diff --git a/lib/config/default_global_settings.dart b/lib/config/default_global_settings.dart index 2b98f69..9cb4485 100644 --- a/lib/config/default_global_settings.dart +++ b/lib/config/default_global_settings.dart @@ -1,4 +1,4 @@ -import 'package:wordguessing/utils/tools.dart'; +import 'package:wordguessing/utils/tools.dart'; class DefaultGlobalSettings { // available global parameters codes @@ -25,9 +25,4 @@ class DefaultGlobalSettings { printlog('Did not find any available value for global parameter "$parameterCode".'); return []; } - - // parameters displayed with assets (instead of painter) - static List<String> displayedWithAssets = [ - // - ]; } diff --git a/lib/ui/game/game_end.dart b/lib/ui/game/game_end.dart index f760ccf..c1b24ba 100644 --- a/lib/ui/game/game_end.dart +++ b/lib/ui/game/game_end.dart @@ -25,6 +25,7 @@ class GameEndWidget extends StatelessWidget { padding: const EdgeInsets.all(2), child: Table( defaultColumnWidth: const IntrinsicColumnWidth(), + defaultVerticalAlignment: TableCellVerticalAlignment.bottom, children: [ TableRow( children: [ diff --git a/lib/ui/helpers/styled_button.dart b/lib/ui/helpers/styled_button.dart new file mode 100644 index 0000000..729fd5c --- /dev/null +++ b/lib/ui/helpers/styled_button.dart @@ -0,0 +1,210 @@ +import 'package:auto_size_text/auto_size_text.dart'; +import 'package:flutter/material.dart'; + +import 'package:wordguessing/utils/color_extensions.dart'; + +class StyledButton extends StatelessWidget { + const StyledButton({ + super.key, + required this.color, + required this.onPressed, + this.onLongPress, + required this.child, + }); + + final Color color; + final VoidCallback? onPressed; + final VoidCallback? onLongPress; + final Widget child; + + factory StyledButton.text({ + Key? key, + required VoidCallback? onPressed, + VoidCallback? onLongPress, + required String caption, + required Color color, + }) { + final Widget captionWidget = AutoSizeText( + caption, + maxLines: 1, + style: TextStyle( + inherit: true, + fontWeight: FontWeight.w900, + color: color.darken(60), + shadows: [ + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(2, 2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(2, -2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(-2, 2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(-2, -2), + ), + ], + ), + ); + + return StyledButton( + color: color, + onPressed: onPressed, + onLongPress: onLongPress, + child: captionWidget, + ); + } + + factory StyledButton.icon({ + Key? key, + required VoidCallback? onPressed, + VoidCallback? onLongPress, + required Icon icon, + required Color color, + required double iconSize, + }) { + return StyledButton( + color: color, + onPressed: onPressed, + onLongPress: onLongPress, + child: Icon( + icon.icon, + color: icon.color ?? color.darken(60), + size: iconSize, + shadows: [ + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(2, 2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(2, -2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(-2, 2), + ), + Shadow( + blurRadius: 5.0, + color: color.lighten(60), + offset: const Offset(-2, -2), + ), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + const double borderWidth = 4; + final Color borderColor = color.darken(40); + const double borderRadius = 10; + + return Container( + margin: const EdgeInsets.all(2), + padding: const EdgeInsets.all(2), + decoration: BoxDecoration( + color: color, + border: Border.all( + color: borderColor, + width: borderWidth, + ), + borderRadius: BorderRadius.circular(borderRadius), + ), + child: CustomPaint( + painter: StyledButtonPainter( + baseColor: color, + ), + child: MaterialButton( + onPressed: onPressed, + onLongPress: onLongPress, + padding: const EdgeInsets.all(8), + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + minWidth: 40, + child: child, + ), + ), + ); + } +} + +class StyledButtonPainter extends CustomPainter { + StyledButtonPainter({ + required this.baseColor, + }); + + final Color baseColor; + + @override + void paint(Canvas canvas, Size size) { + final Color lightColor = baseColor.lighten(20); + final Color darkColor = baseColor.darken(20); + + final Paint paint = Paint()..style = PaintingStyle.fill; + + const double cornerRadius = 6; + + Path topPath = Path() + ..moveTo(cornerRadius, 0) + ..lineTo(size.width - cornerRadius, 0) + ..arcToPoint( + Offset(size.width, cornerRadius), + radius: const Radius.circular(cornerRadius), + ) + ..lineTo(size.width, size.height * .35) + ..quadraticBezierTo( + size.width * .4, + size.height * .1, + 0, + size.height * .3, + ) + ..lineTo(0, cornerRadius) + ..arcToPoint( + const Offset(cornerRadius, 0), + radius: const Radius.circular(cornerRadius), + ); + + Path bottomPath = Path() + ..moveTo(cornerRadius, size.height) + ..lineTo(size.width - cornerRadius, size.height) + ..arcToPoint( + Offset(size.width, size.height - cornerRadius), + radius: const Radius.circular(cornerRadius), + clockwise: false, + ) + ..lineTo(size.width, size.height * .7) + ..quadraticBezierTo( + size.width * .6, + size.height * .9, + 0, + size.height * .7, + ) + ..lineTo(0, size.height - cornerRadius) + ..arcToPoint( + Offset(cornerRadius, size.height), + radius: const Radius.circular(cornerRadius), + clockwise: false, + ); + + paint.color = lightColor; + canvas.drawPath(topPath, paint); + + paint.color = darkColor; + canvas.drawPath(bottomPath, paint); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) => false; +} diff --git a/lib/ui/layouts/parameters_layout.dart b/lib/ui/layouts/parameters_layout.dart index ff114f3..bc6290a 100644 --- a/lib/ui/layouts/parameters_layout.dart +++ b/lib/ui/layouts/parameters_layout.dart @@ -5,8 +5,7 @@ import 'package:wordguessing/config/default_game_settings.dart'; import 'package:wordguessing/config/default_global_settings.dart'; import 'package:wordguessing/cubit/settings_game_cubit.dart'; import 'package:wordguessing/cubit/settings_global_cubit.dart'; -import 'package:wordguessing/ui/parameters/parameter_image.dart'; -import 'package:wordguessing/ui/parameters/parameter_painter.dart'; +import 'package:wordguessing/ui/parameters/parameter_widget.dart'; import 'package:wordguessing/ui/widgets/actions/button_delete_saved_game.dart'; import 'package:wordguessing/ui/widgets/actions/button_game_start_new.dart'; import 'package:wordguessing/ui/widgets/actions/button_resume_saved_game.dart'; @@ -35,21 +34,27 @@ class ParametersLayout extends StatelessWidget { lines.add(SizedBox(height: separatorHeight)); } - lines.add(SizedBox(height: separatorHeight)); + lines.add(Expanded( + child: SizedBox(height: separatorHeight), + )); if (canResume == false) { // Start new game - lines.add(const Expanded( - child: StartNewGameButton(), - )); + lines.add( + const AspectRatio( + aspectRatio: 3, + child: StartNewGameButton(), + ), + ); } else { // Resume game - lines.add(const Expanded( + lines.add(const AspectRatio( + aspectRatio: 3, child: ResumeSavedGameButton(), )); // Delete saved game lines.add(SizedBox.square( - dimension: MediaQuery.of(context).size.width / 4, + dimension: MediaQuery.of(context).size.width / 5, child: const DeleteSavedGameButton(), )); } @@ -102,44 +107,26 @@ class ParametersLayout extends StatelessWidget { ? globalSettingsCubit.getParameterValue(code) : gameSettingsCubit.getParameterValue(code); - final bool isActive = (value == currentValue); + final bool isSelected = (value == currentValue); final double displayWidth = MediaQuery.of(context).size.width; - final double itemWidth = displayWidth / availableValues.length - 26; - - final bool displayedWithAssets = - DefaultGlobalSettings.displayedWithAssets.contains(code) || - DefaultGameSettings.displayedWithAssets.contains(code); - - return TextButton( - child: Container( - child: displayedWithAssets - ? SizedBox.square( - dimension: itemWidth, - child: ParameterImage( - code: code, - value: value, - isSelected: isActive, - ), - ) - : CustomPaint( - size: Size(itemWidth, itemWidth), - willChange: false, - painter: ParameterPainter( - code: code, - value: value, - isSelected: isActive, - gameSettings: gameSettingsState.settings, - globalSettings: globalSettingsState.settings, - ), - isComplex: true, - ), + final double itemWidth = displayWidth / availableValues.length - 4; + + return SizedBox.square( + dimension: itemWidth, + child: ParameterWidget( + code: code, + value: value, + isSelected: isSelected, + size: itemWidth, + gameSettings: gameSettingsState.settings, + globalSettings: globalSettingsState.settings, + onPressed: () { + isGlobal + ? globalSettingsCubit.setParameterValue(code, value) + : gameSettingsCubit.setParameterValue(code, value); + }, ), - onPressed: () { - isGlobal - ? globalSettingsCubit.setParameterValue(code, value) - : gameSettingsCubit.setParameterValue(code, value); - }, ); }, ); diff --git a/lib/ui/parameters/parameter_image.dart b/lib/ui/parameters/parameter_image.dart deleted file mode 100644 index fc4b576..0000000 --- a/lib/ui/parameters/parameter_image.dart +++ /dev/null @@ -1,38 +0,0 @@ -import 'package:flutter/material.dart'; - -class ParameterImage extends StatelessWidget { - const ParameterImage({ - super.key, - required this.code, - required this.value, - required this.isSelected, - }); - - final String code; - final String value; - final bool isSelected; - - static const Color buttonBackgroundColor = Colors.white; - static const Color buttonBorderColorActive = Colors.blue; - static const Color buttonBorderColorInactive = Colors.white; - static const double buttonBorderWidth = 8.0; - static const double buttonBorderRadius = 8.0; - - @override - Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: buttonBackgroundColor, - borderRadius: BorderRadius.circular(buttonBorderRadius), - border: Border.all( - color: isSelected ? buttonBorderColorActive : buttonBorderColorInactive, - width: buttonBorderWidth, - ), - ), - child: Image( - image: AssetImage('assets/ui/${code}_$value.png'), - fit: BoxFit.fill, - ), - ); - } -} diff --git a/lib/ui/parameters/parameter_painter.dart b/lib/ui/parameters/parameter_painter.dart index 9fe8dae..97fb9a0 100644 --- a/lib/ui/parameters/parameter_painter.dart +++ b/lib/ui/parameters/parameter_painter.dart @@ -2,7 +2,6 @@ import 'dart:math'; import 'package:flutter/material.dart'; -import 'package:wordguessing/config/default_game_settings.dart'; import 'package:wordguessing/models/settings/settings_game.dart'; import 'package:wordguessing/models/settings/settings_global.dart'; import 'package:wordguessing/utils/tools.dart'; @@ -11,14 +10,12 @@ class ParameterPainter extends CustomPainter { const ParameterPainter({ required this.code, required this.value, - required this.isSelected, required this.gameSettings, required this.globalSettings, }); final String code; final String value; - final bool isSelected; final GameSettings gameSettings; final GlobalSettings globalSettings; @@ -27,26 +24,11 @@ class ParameterPainter extends CustomPainter { // force square final double canvasSize = min(size.width, size.height); - const Color borderColorEnabled = Colors.blue; - const Color borderColorDisabled = Colors.white; - - // "enabled/disabled" border - final paint = Paint(); - paint.style = PaintingStyle.stroke; - paint.color = isSelected ? borderColorEnabled : borderColorDisabled; - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 10; - canvas.drawRect( - Rect.fromPoints(const Offset(0, 0), Offset(canvasSize, canvasSize)), paint); - // content switch (code) { - case DefaultGameSettings.parameterCodeLangValue: - paintLangParameterItem(value, canvas, canvasSize); - break; default: printlog('Unknown parameter: $code/$value'); - paintUnknownParameterItem(value, canvas, canvasSize); + paintUnknownParameterItem(canvas, canvasSize); } } @@ -57,7 +39,6 @@ class ParameterPainter extends CustomPainter { // "unknown" parameter -> simple block with text void paintUnknownParameterItem( - final String value, final Canvas canvas, final double size, ) { @@ -65,12 +46,8 @@ class ParameterPainter extends CustomPainter { paint.strokeJoin = StrokeJoin.round; paint.strokeWidth = 3; - paint.color = Colors.grey; - paint.style = PaintingStyle.fill; - canvas.drawRect(Rect.fromPoints(const Offset(0, 0), Offset(size, size)), paint); - final textSpan = TextSpan( - text: '?\n$value', + text: '$code\n$value', style: const TextStyle( color: Colors.black, fontSize: 18, @@ -91,58 +68,4 @@ class ParameterPainter extends CustomPainter { ), ); } - - void paintLangParameterItem( - final String value, - final Canvas canvas, - final double size, - ) { - Color backgroundColor = Colors.grey; - String text = ''; - - switch (value) { - case DefaultGameSettings.langValueFr: - text = '🇫🇷'; - backgroundColor = Colors.teal; - break; - case DefaultGameSettings.langValueEn: - text = '🇬🇧'; - backgroundColor = Colors.teal; - break; - default: - printlog('Wrong value for lang parameter value: $value'); - } - - final paint = Paint(); - paint.strokeJoin = StrokeJoin.round; - paint.strokeWidth = 3; - - // Colored background - paint.color = backgroundColor; - paint.style = PaintingStyle.fill; - canvas.drawRect(Rect.fromPoints(const Offset(0, 0), Offset(size, size)), paint); - - // centered text value - final textSpan = TextSpan( - text: text, - style: TextStyle( - color: Colors.black, - fontSize: size / 2.6, - fontWeight: FontWeight.bold, - ), - ); - final textPainter = TextPainter( - text: textSpan, - textDirection: TextDirection.ltr, - textAlign: TextAlign.center, - ); - textPainter.layout(); - textPainter.paint( - canvas, - Offset( - (size - textPainter.width) * 0.5, - (size - textPainter.height) * 0.5, - ), - ); - } } diff --git a/lib/ui/parameters/parameter_widget.dart b/lib/ui/parameters/parameter_widget.dart new file mode 100644 index 0000000..2d96feb --- /dev/null +++ b/lib/ui/parameters/parameter_widget.dart @@ -0,0 +1,114 @@ +import 'package:flutter/material.dart'; + +import 'package:wordguessing/config/default_game_settings.dart'; +import 'package:wordguessing/models/settings/settings_game.dart'; +import 'package:wordguessing/models/settings/settings_global.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; +import 'package:wordguessing/utils/tools.dart'; + +class ParameterWidget extends StatelessWidget { + const ParameterWidget({ + super.key, + required this.code, + required this.value, + required this.isSelected, + required this.size, + required this.gameSettings, + required this.globalSettings, + required this.onPressed, + }); + + final String code; + final String value; + final bool isSelected; + final double size; + final GameSettings gameSettings; + final GlobalSettings globalSettings; + final VoidCallback onPressed; + + static const Color buttonColorActive = Colors.blue; + static const Color buttonColorInactive = Colors.white; + static const double buttonBorderWidth = 4.0; + static const double buttonBorderRadius = 12.0; + + @override + Widget build(BuildContext context) { + Widget content = const SizedBox.shrink(); + + switch (code) { + case DefaultGameSettings.parameterCodeGameType: + content = getGameTypeParameterItem(); + break; + case DefaultGameSettings.parameterCodeLangValue: + content = getLangValueParameterItem(); + break; + default: + printlog('Unknown parameter: $code/$value'); + content = getUnknownParameterItem(); + } + + final Color buttonColor = isSelected ? buttonColorActive : buttonColorInactive; + + return Container( + decoration: BoxDecoration( + color: buttonColor, + borderRadius: BorderRadius.circular(buttonBorderRadius), + border: Border.all( + color: buttonColor, + width: buttonBorderWidth, + ), + ), + child: content, + ); + } + + // "unknown" parameter -> simple block with text + Widget getUnknownParameterItem() { + return StyledButton.text( + caption: '$code / $value', + color: Colors.grey, + onPressed: null, + ); + } + + Widget getGameTypeParameterItem() { + const Color backgroundColor = Colors.teal; + + return StyledButton( + color: backgroundColor, + onPressed: onPressed, + child: Image( + image: AssetImage('assets/ui/${DefaultGameSettings.parameterCodeGameType}_$value.png'), + fit: BoxFit.fill, + ), + ); + } + + Widget getLangValueParameterItem() { + const Color backgroundColor = Colors.teal; + + String text = ''; + + switch (value) { + case DefaultGameSettings.langValueFr: + text = '🇫🇷'; + break; + case DefaultGameSettings.langValueEn: + text = '🇬🇧'; + break; + default: + printlog('Wrong value for lang parameter value: $value'); + } + + return StyledButton( + color: backgroundColor, + onPressed: onPressed, + child: Text( + text, + style: TextStyle( + fontSize: 70, + ), + ), + ); + } +} diff --git a/lib/ui/widgets/actions/button_delete_saved_game.dart b/lib/ui/widgets/actions/button_delete_saved_game.dart index 0bf51b1..3025730 100644 --- a/lib/ui/widgets/actions/button_delete_saved_game.dart +++ b/lib/ui/widgets/actions/button_delete_saved_game.dart @@ -2,20 +2,22 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wordguessing/cubit/game_cubit.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; class DeleteSavedGameButton extends StatelessWidget { const DeleteSavedGameButton({super.key}); @override Widget build(BuildContext context) { - return TextButton( + return StyledButton( + color: Colors.grey, + onPressed: () { + BlocProvider.of<GameCubit>(context).deleteSavedGame(); + }, child: const Image( image: AssetImage('assets/ui/button_delete_saved_game.png'), fit: BoxFit.fill, ), - onPressed: () { - BlocProvider.of<GameCubit>(context).deleteSavedGame(); - }, ); } } diff --git a/lib/ui/widgets/actions/button_game_quit.dart b/lib/ui/widgets/actions/button_game_quit.dart index db54a2b..e31c529 100644 --- a/lib/ui/widgets/actions/button_game_quit.dart +++ b/lib/ui/widgets/actions/button_game_quit.dart @@ -2,20 +2,22 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wordguessing/cubit/game_cubit.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; class QuitGameButton extends StatelessWidget { const QuitGameButton({super.key}); @override Widget build(BuildContext context) { - return TextButton( + return StyledButton( + color: Colors.red, + onPressed: () { + BlocProvider.of<GameCubit>(context).quitGame(); + }, child: const Image( image: AssetImage('assets/ui/button_back.png'), fit: BoxFit.fill, ), - onPressed: () { - BlocProvider.of<GameCubit>(context).quitGame(); - }, ); } } diff --git a/lib/ui/widgets/actions/button_game_start_new.dart b/lib/ui/widgets/actions/button_game_start_new.dart index dede701..008a21c 100644 --- a/lib/ui/widgets/actions/button_game_start_new.dart +++ b/lib/ui/widgets/actions/button_game_start_new.dart @@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wordguessing/cubit/game_cubit.dart'; import 'package:wordguessing/cubit/settings_game_cubit.dart'; import 'package:wordguessing/cubit/settings_global_cubit.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; class StartNewGameButton extends StatelessWidget { const StartNewGameButton({super.key}); @@ -14,17 +15,18 @@ class StartNewGameButton extends StatelessWidget { builder: (BuildContext context, GameSettingsState gameSettingsState) { return BlocBuilder<GlobalSettingsCubit, GlobalSettingsState>( builder: (BuildContext context, GlobalSettingsState globalSettingsState) { - return TextButton( - child: const Image( - image: AssetImage('assets/ui/button_start.png'), - fit: BoxFit.fill, - ), + return StyledButton( + color: Colors.blue, onPressed: () { BlocProvider.of<GameCubit>(context).startNewGame( gameSettings: gameSettingsState.settings, globalSettings: globalSettingsState.settings, ); }, + child: const Image( + image: AssetImage('assets/ui/button_start.png'), + fit: BoxFit.fill, + ), ); }, ); diff --git a/lib/ui/widgets/actions/button_resume_saved_game.dart b/lib/ui/widgets/actions/button_resume_saved_game.dart index 4e26624..3dde253 100644 --- a/lib/ui/widgets/actions/button_resume_saved_game.dart +++ b/lib/ui/widgets/actions/button_resume_saved_game.dart @@ -2,20 +2,22 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:wordguessing/cubit/game_cubit.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; class ResumeSavedGameButton extends StatelessWidget { const ResumeSavedGameButton({super.key}); @override Widget build(BuildContext context) { - return TextButton( + return StyledButton( + color: Colors.blue, + onPressed: () { + BlocProvider.of<GameCubit>(context).resumeSavedGame(); + }, child: const Image( image: AssetImage('assets/ui/button_resume_game.png'), fit: BoxFit.fill, ), - onPressed: () { - BlocProvider.of<GameCubit>(context).resumeSavedGame(); - }, ); } } diff --git a/lib/ui/widgets/game/pick_word_game_image.dart b/lib/ui/widgets/game/pick_word_game_image.dart index 705450c..78b6290 100644 --- a/lib/ui/widgets/game/pick_word_game_image.dart +++ b/lib/ui/widgets/game/pick_word_game_image.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; - class PickWordGameImageContainer extends StatelessWidget { const PickWordGameImageContainer({super.key, required this.image}); diff --git a/lib/ui/widgets/global_app_bar.dart b/lib/ui/widgets/global_app_bar.dart index 540f87e..dc3015a 100644 --- a/lib/ui/widgets/global_app_bar.dart +++ b/lib/ui/widgets/global_app_bar.dart @@ -6,6 +6,7 @@ import 'package:wordguessing/cubit/game_cubit.dart'; import 'package:wordguessing/cubit/nav_cubit.dart'; import 'package:wordguessing/models/game/game.dart'; import 'package:wordguessing/ui/helpers/app_titles.dart'; +import 'package:wordguessing/ui/helpers/styled_button.dart'; class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { const GlobalAppBar({super.key}); @@ -21,15 +22,16 @@ class GlobalAppBar extends StatelessWidget implements PreferredSizeWidget { final List<Widget> menuActions = []; if (currentGame.isRunning && !currentGame.isFinished) { - menuActions.add(TextButton( - child: const Image( - image: AssetImage('assets/ui/button_back.png'), - fit: BoxFit.fill, - ), + menuActions.add(StyledButton( + color: Colors.red, onPressed: () {}, onLongPress: () { BlocProvider.of<GameCubit>(context).quitGame(); }, + child: const Image( + image: AssetImage('assets/ui/button_back.png'), + fit: BoxFit.fill, + ), )); } else { if (pageIndex == Menu.indexGame) { diff --git a/pubspec.lock b/pubspec.lock index e0ab96e..229631c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -17,6 +17,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.11.0" + auto_size_text: + dependency: "direct main" + description: + name: auto_size_text + sha256: "3f5261cd3fb5f2a9ab4e2fc3fba84fd9fcaac8821f20a1d4e71f557521b22599" + url: "https://pub.dev" + source: hosted + version: "3.0.0" bloc: dependency: transitive description: @@ -53,10 +61,10 @@ packages: dependency: transitive description: name: crypto - sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + sha256: ec30d999af904f33454ba22ed9a86162b35e52b44ac4807d1d93c288041d7d27 url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.5" easy_localization: dependency: "direct main" description: @@ -85,18 +93,18 @@ packages: dependency: transitive description: name: ffi - sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" file: dependency: transitive description: name: file - sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4 url: "https://pub.dev" source: hosted - version: "7.0.0" + version: "7.0.1" flutter: dependency: "direct main" description: flutter @@ -114,10 +122,10 @@ packages: dependency: "direct dev" description: name: flutter_lints - sha256: "3f41d009ba7172d5ff9be5f6e6e6abb4300e263aab8866d2a0842ed2a70f8f0c" + sha256: "5398f14efa795ffb7a33e9b6a08798b26a180edac4ad7db3f231e40f82ce11e1" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" flutter_localizations: dependency: transitive description: flutter @@ -140,10 +148,10 @@ packages: dependency: transitive description: name: http - sha256: "761a297c042deedc1ffbb156d6e2af13886bb305c2a343a4d972504cd67dd938" + sha256: b9c29a161230ee03d3ccf545097fccd9b87a5264228c5d348202e0f0c28f9010 url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" http_parser: dependency: transitive description: @@ -172,26 +180,26 @@ packages: dependency: transitive description: name: lints - sha256: "976c774dd944a42e83e2467f4cc670daef7eed6295b10b36ae8c85bcbf828235" + sha256: "3315600f3fb3b135be672bf4a178c55f274bebe368325ae18462c89ac1e3b413" url: "https://pub.dev" source: hosted - version: "4.0.0" + version: "5.0.0" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a" + sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec url: "https://pub.dev" source: hosted - version: "0.8.0" + version: "0.11.1" meta: dependency: transitive description: name: meta - sha256: "7687075e408b093f36e6bbf6c91878cc0d4cd10f409506f7bc996f68220b9136" + sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.15.0" nested: dependency: transitive description: @@ -204,18 +212,18 @@ packages: dependency: "direct main" description: name: package_info_plus - sha256: b93d8b4d624b4ea19b0a5a208b2d6eff06004bc3ce74c06040b120eeadd00ce0 + sha256: "894f37107424311bdae3e476552229476777b8752c5a2a2369c0cb9a2d5442ef" url: "https://pub.dev" source: hosted - version: "8.0.0" + version: "8.0.3" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f49918f3433a3146047372f9d4f1f847511f2acd5cd030e1f44fe5a50036b70e + sha256: ac1f4a4847f1ade8e6a87d1f39f5d7c67490738642e2542f559ec38c37489a66 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" path: dependency: transitive description: @@ -228,18 +236,18 @@ packages: dependency: "direct main" description: name: path_provider - sha256: c9e7d3a4cd1410877472158bee69963a4579f78b68c65a2b7d40d1a7a88bb161 + sha256: fec0d61223fba3154d87759e3cc27fe2c8dc498f6386c6d6fc80d1afdd1bf378 url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "2.1.4" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "9c96da072b421e98183f9ea7464898428e764bc0ce5567f27ec8693442e72514" + sha256: c464428172cb986b758c6d1724c603097febb8fb855aa265aeecc9280c294d4a url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.12" path_provider_foundation: dependency: transitive description: @@ -268,10 +276,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170" + sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7 url: "https://pub.dev" source: hosted - version: "2.2.1" + version: "2.3.0" platform: dependency: transitive description: @@ -300,58 +308,58 @@ packages: dependency: transitive description: name: shared_preferences - sha256: d3bbe5553a986e83980916ded2f0b435ef2e1893dfaa29d5a7a790d0eca12180 + sha256: "746e5369a43170c25816cc472ee016d3a66bc13fcf430c0bc41ad7b4b2922051" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.2" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "93d0ec9dd902d85f326068e6a899487d1f65ffcd5798721a95330b26c8131577" + sha256: "3b9febd815c9ca29c9e3520d50ec32f49157711e143b7a4ca039eb87e8ade5ab" url: "https://pub.dev" source: hosted - version: "2.2.3" + version: "2.3.3" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "0a8a893bf4fd1152f93fec03a415d11c27c74454d96e2318a7ac38dd18683ab7" + sha256: "07e050c7cd39bad516f8d64c455f04508d09df104be326d8c02551590a0d513d" url: "https://pub.dev" source: hosted - version: "2.4.0" + version: "2.5.3" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa" + sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b" + sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "9aee1089b36bd2aafe06582b7d7817fd317ef05fc30e6ba14bff247d0933042a" + sha256: d2ca4132d3946fec2184261726b355836a82c33d7d5b67af32692aff18a4684e url: "https://pub.dev" source: hosted - version: "2.3.0" + version: "2.4.2" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59" + sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1" url: "https://pub.dev" source: hosted - version: "2.3.2" + version: "2.4.1" sky_engine: dependency: transitive description: flutter @@ -369,18 +377,18 @@ packages: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.3.0" synchronized: dependency: transitive description: name: synchronized - sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558" + sha256: "69fe30f3a8b04a0be0c15ae6490fc859a78ef4c43ae2dd5e8a623d45bfcf9225" url: "https://pub.dev" source: hosted - version: "3.1.0+1" + version: "3.3.0+3" term_glyph: dependency: transitive description: @@ -401,10 +409,10 @@ packages: dependency: "direct main" description: name: unicons - sha256: dbfcf93ff4d4ea19b324113857e358e4882115ab85db04417a4ba1c72b17a670 + sha256: f3eab9d87c226415ef857cfd2167e1d12ad81ea1f5783b46cf644224fea4eab7 url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "3.0.0" vector_math: dependency: transitive description: @@ -417,26 +425,26 @@ packages: dependency: transitive description: name: web - sha256: "97da13628db363c635202ad97068d47c5b8aa555808e7a9411963c533b449b27" + sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb url: "https://pub.dev" source: hosted - version: "0.5.1" + version: "1.1.0" win32: dependency: transitive description: name: win32 - sha256: a79dbe579cb51ecd6d30b17e0cae4e0ea15e2c0e66f69ad4198f22a6789e94f4 + sha256: "4d45dc9069dba4619dc0ebd93c7cec5e66d8482cb625a370ac806dcc8165f2ec" url: "https://pub.dev" source: hosted - version: "5.5.1" + version: "5.5.5" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d + sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15" url: "https://pub.dev" source: hosted - version: "1.0.4" + version: "1.1.0" sdks: - dart: ">=3.4.0 <4.0.0" - flutter: ">=3.22.0" + dart: ">=3.5.0 <4.0.0" + flutter: ">=3.24.0" diff --git a/pubspec.yaml b/pubspec.yaml index 749d20f..4a7d65a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -3,7 +3,7 @@ description: A wordguessing game application. publish_to: "none" -version: 0.2.0+65 +version: 0.2.1+66 environment: sdk: "^3.0.0" @@ -13,6 +13,7 @@ dependencies: sdk: flutter # base + auto_size_text: ^3.0.0 easy_localization: ^3.0.1 equatable: ^2.0.5 flutter_bloc: ^8.1.1 @@ -20,20 +21,20 @@ dependencies: hydrated_bloc: ^9.0.0 package_info_plus: ^8.0.0 path_provider: ^2.0.11 - unicons: ^2.1.1 + unicons: ^3.0.0 # specific # (none) dev_dependencies: - flutter_lints: ^4.0.0 + flutter_lints: ^5.0.0 flutter: uses-material-design: true assets: - assets/images/ - - assets/ui/ - assets/translations/ + - assets/ui/ fonts: - family: Nunito @@ -46,4 +47,3 @@ flutter: weight: 400 - asset: assets/fonts/Nunito-Light.ttf weight: 300 - diff --git a/resources/app/build_application_resources.sh b/resources/app/build_application_resources.sh index 6d67b8f..1ace90d 100755 --- a/resources/app/build_application_resources.sh +++ b/resources/app/build_application_resources.sh @@ -1,9 +1,18 @@ #! /bin/bash # Check dependencies -command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } -command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } -command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } +command -v inkscape >/dev/null 2>&1 || { + echo >&2 "I require inkscape but it's not installed. Aborting." + exit 1 +} +command -v scour >/dev/null 2>&1 || { + echo >&2 "I require scour but it's not installed. Aborting." + exit 1 +} +command -v optipng >/dev/null 2>&1 || { + echo >&2 "I require optipng but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "$(dirname "${CURRENT_DIR}")")" @@ -31,14 +40,14 @@ function optimize_svg() { cp ${SVG} ${SVG}.tmp scour \ - --remove-descriptive-elements \ - --enable-id-stripping \ - --enable-viewboxing \ - --enable-comment-stripping \ - --nindent=4 \ - --quiet \ - -i ${SVG}.tmp \ - -o ${SVG} + --remove-descriptive-elements \ + --enable-id-stripping \ + --enable-viewboxing \ + --enable-comment-stripping \ + --nindent=4 \ + --quiet \ + -i ${SVG}.tmp \ + -o ${SVG} rm ${SVG}.tmp } @@ -57,10 +66,10 @@ function build_application_icon() { TARGET_PNG="${TARGET}.png" inkscape \ - --export-width=${ICON_SIZE} \ - --export-height=${ICON_SIZE} \ - --export-filename=${TARGET_PNG} \ - ${SOURCE_ICON} + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET_PNG} \ + ${SOURCE_ICON} optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG} } @@ -76,10 +85,10 @@ function build_fastlane_image() { TARGET_PNG="${TARGET}.png" inkscape \ - --export-width=${WIDTH} \ - --export-height=${HEIGHT} \ - --export-filename=${TARGET_PNG} \ - ${SOURCE_FASTLANE} + --export-width=${WIDTH} \ + --export-height=${HEIGHT} \ + --export-filename=${TARGET_PNG} \ + ${SOURCE_FASTLANE} optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG} } @@ -94,24 +103,24 @@ function build_launch_image() { TARGET_PNG="${TARGET}.png" inkscape \ - --export-width=${ICON_SIZE} \ - --export-height=${ICON_SIZE} \ - --export-filename=${TARGET_PNG} \ - ${SOURCE_LAUNCH_IMAGE} + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET_PNG} \ + ${SOURCE_LAUNCH_IMAGE} optipng ${OPTIPNG_OPTIONS} ${TARGET_PNG} } -build_application_icon 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/ic_launcher -build_application_icon 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher -build_application_icon 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher +build_application_icon 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/ic_launcher +build_application_icon 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/ic_launcher +build_application_icon 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/ic_launcher build_application_icon 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher build_application_icon 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher build_application_icon 512 ${BASE_DIR}/fastlane/metadata/android/en-US/images/icon -build_launch_image 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/launch_image -build_launch_image 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/launch_image -build_launch_image 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/launch_image +build_launch_image 72 ${BASE_DIR}/android/app/src/main/res/mipmap-hdpi/launch_image +build_launch_image 48 ${BASE_DIR}/android/app/src/main/res/mipmap-mdpi/launch_image +build_launch_image 96 ${BASE_DIR}/android/app/src/main/res/mipmap-xhdpi/launch_image build_launch_image 144 ${BASE_DIR}/android/app/src/main/res/mipmap-xxhdpi/launch_image build_launch_image 192 ${BASE_DIR}/android/app/src/main/res/mipmap-xxxhdpi/launch_image diff --git a/resources/data/01_download_images.sh b/resources/data/01_download_images.sh index b3a802d..54ec8ea 100755 --- a/resources/data/01_download_images.sh +++ b/resources/data/01_download_images.sh @@ -4,8 +4,14 @@ set -o errexit set -o nounset set -o pipefail -command -v convert >/dev/null 2>&1 || { echo >&2 "I require convert (imagemagick) but it's not installed. Aborting."; exit 1; } -command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq (json parser) but it's not installed. Aborting."; exit 1; } +command -v convert >/dev/null 2>&1 || { + echo >&2 "I require convert (imagemagick) but it's not installed. Aborting." + exit 1 +} +command -v jq >/dev/null 2>&1 || { + echo >&2 "I require jq (json parser) but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" diff --git a/resources/data/03_optimize_images.sh b/resources/data/03_optimize_images.sh index 6dcc0d0..7d22444 100755 --- a/resources/data/03_optimize_images.sh +++ b/resources/data/03_optimize_images.sh @@ -1,7 +1,13 @@ #!/usr/bin/env bash -command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } -command -v convert >/dev/null 2>&1 || { echo >&2 "I require convert (imagemagick) but it's not installed. Aborting."; exit 1; } +command -v optipng >/dev/null 2>&1 || { + echo >&2 "I require optipng but it's not installed. Aborting." + exit 1 +} +command -v convert >/dev/null 2>&1 || { + echo >&2 "I require convert (imagemagick) but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" diff --git a/resources/data/04_build_images_board.sh b/resources/data/04_build_images_board.sh index 2650396..f1ae824 100755 --- a/resources/data/04_build_images_board.sh +++ b/resources/data/04_build_images_board.sh @@ -1,11 +1,13 @@ #!/usr/bin/env bash -command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq (json parser) but it's not installed. Aborting."; exit 1; } +command -v jq >/dev/null 2>&1 || { + echo >&2 "I require jq (json parser) but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" - IMAGES_CACHE_FOLDER="${CURRENT_DIR}/cache" IMAGES_OPTIMIZED_FOLDER="${IMAGES_CACHE_FOLDER}/optimized" OUTPUT_IMAGES_BOARD_FILE="${IMAGES_CACHE_FOLDER}/images_board.html" @@ -20,34 +22,34 @@ echo "Building images board file..." FILES="$(find "${IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" | sed "s|^${IMAGES_OPTIMIZED_FOLDER}/||g" | sort)" KEYWORDS="$(echo "${FILES}" | cut -d'/' -f1 | sort | uniq)" -echo "<!DOCTYPE html>" > "${OUTPUT_IMAGES_BOARD_FILE}" -echo "<html lang=\"en\">" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " <head>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " <style>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " table { border-collapse: collapse; border: solid 2px black; width: 100%; }" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " tr { }" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " td { border: solid 1px black; }" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " span { font-weight: bold; }" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " img { border: solid 1px grey; }" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " </style>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " </head>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " <body>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " <table>" >> "${OUTPUT_IMAGES_BOARD_FILE}" +echo "<!DOCTYPE html>" >"${OUTPUT_IMAGES_BOARD_FILE}" +echo "<html lang=\"en\">" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " <head>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " <style>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " table { border-collapse: collapse; border: solid 2px black; width: 100%; }" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " tr { }" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " td { border: solid 1px black; }" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " span { font-weight: bold; }" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " img { border: solid 1px grey; }" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " </style>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " </head>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " <body>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " <table>" >>"${OUTPUT_IMAGES_BOARD_FILE}" while read -r KEYWORD; do if [[ -n "${KEYWORD}" ]]; then - echo " <tr>" >> "${OUTPUT_IMAGES_BOARD_FILE}" - echo " <td><span>${KEYWORD}</span></td>" >> "${OUTPUT_IMAGES_BOARD_FILE}" + echo " <tr>" >>"${OUTPUT_IMAGES_BOARD_FILE}" + echo " <td><span>${KEYWORD}</span></td>" >>"${OUTPUT_IMAGES_BOARD_FILE}" FILES_KEYWORD="$(echo "${FILES}" | grep -e "^${KEYWORD}/")" - echo " <td>" >> "${OUTPUT_IMAGES_BOARD_FILE}" + echo " <td>" >>"${OUTPUT_IMAGES_BOARD_FILE}" while read -r FILE; do - echo " <img src=\"optimized/${FILE}\">" >> "${OUTPUT_IMAGES_BOARD_FILE}" + echo " <img src=\"optimized/${FILE}\">" >>"${OUTPUT_IMAGES_BOARD_FILE}" done < <(echo "${FILES_KEYWORD}") - echo " </td>" >> "${OUTPUT_IMAGES_BOARD_FILE}" - echo " </tr>" >> "${OUTPUT_IMAGES_BOARD_FILE}" + echo " </td>" >>"${OUTPUT_IMAGES_BOARD_FILE}" + echo " </tr>" >>"${OUTPUT_IMAGES_BOARD_FILE}" fi done < <(echo "${KEYWORDS}") -echo " </table>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo " </body>" >> "${OUTPUT_IMAGES_BOARD_FILE}" -echo "</html>" >> "${OUTPUT_IMAGES_BOARD_FILE}" +echo " </table>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo " </body>" >>"${OUTPUT_IMAGES_BOARD_FILE}" +echo "</html>" >>"${OUTPUT_IMAGES_BOARD_FILE}" echo "done." diff --git a/resources/data/05_build_assets_list.sh b/resources/data/05_build_assets_list.sh index d46f2e8..93e5001 100755 --- a/resources/data/05_build_assets_list.sh +++ b/resources/data/05_build_assets_list.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash -command -v jq >/dev/null 2>&1 || { echo >&2 "I require jq (json parser) but it's not installed. Aborting."; exit 1; } +command -v jq >/dev/null 2>&1 || { + echo >&2 "I require jq (json parser) but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "${CURRENT_DIR}")" @@ -32,8 +35,8 @@ echo "Building words/images assets json file..." FILES="$(find "${SOURCE_IMAGES_OPTIMIZED_FOLDER}" -type f -name "*.png" | sed "s|^${SOURCE_IMAGES_OPTIMIZED_FOLDER}/||g" | sort)" OUTPUT_WORDS_LIST_TMP="${OUTPUT_WORDS_LIST}.tmp" -echo "{" > "${OUTPUT_WORDS_LIST_TMP}" -echo " \"words\": {" >> "${OUTPUT_WORDS_LIST_TMP}" +echo "{" >"${OUTPUT_WORDS_LIST_TMP}" +echo " \"words\": {" >>"${OUTPUT_WORDS_LIST_TMP}" FIRST_WORD=1 while read -r LINE; do if [[ -n "${LINE}" ]]; then @@ -44,14 +47,14 @@ while read -r LINE; do KEY="$(echo "${LINE}" | md5sum | awk '{print $1;}')" if [[ ${FIRST_WORD} -eq 0 ]]; then - echo " ," >> "${OUTPUT_WORDS_LIST_TMP}" + echo " ," >>"${OUTPUT_WORDS_LIST_TMP}" fi - echo " \"${KEY}\": {" >> "${OUTPUT_WORDS_LIST_TMP}" - echo " \"fr\": \"${WORD_FR}\"," >> "${OUTPUT_WORDS_LIST_TMP}" - echo " \"en\": \"${WORD_EN}\"," >> "${OUTPUT_WORDS_LIST_TMP}" - - echo " \"images\": [" >> "${OUTPUT_WORDS_LIST_TMP}" + echo " \"${KEY}\": {" >>"${OUTPUT_WORDS_LIST_TMP}" + echo " \"fr\": \"${WORD_FR}\"," >>"${OUTPUT_WORDS_LIST_TMP}" + echo " \"en\": \"${WORD_EN}\"," >>"${OUTPUT_WORDS_LIST_TMP}" + + echo " \"images\": [" >>"${OUTPUT_WORDS_LIST_TMP}" FOLDER_KEY="${WORD_FR}" FILES_FOR_THIS_WORD="$(echo "${FILES}" | grep -E "^${FOLDER_KEY}/")" @@ -59,9 +62,9 @@ while read -r LINE; do FIRST_FILE=1 while read -r FILE; do if [[ ${FIRST_FILE} -eq 0 ]]; then - echo " ," >> "${OUTPUT_WORDS_LIST_TMP}" + echo " ," >>"${OUTPUT_WORDS_LIST_TMP}" fi - echo " \"$(echo "${FILE}" | sed "s|${FOLDER_KEY}/||g")\"" >> "${OUTPUT_WORDS_LIST_TMP}" + echo " \"$(echo "${FILE}" | sed "s|${FOLDER_KEY}/||g")\"" >>"${OUTPUT_WORDS_LIST_TMP}" FIRST_FILE=0 cp -f "${SOURCE_IMAGES_OPTIMIZED_FOLDER}/${FILE}" "${TARGET_IMAGES_ASSETS_FOLDER}" done < <(echo "${FILES_FOR_THIS_WORD}") @@ -69,18 +72,18 @@ while read -r LINE; do echo "No image found for ${KEY} / ${FOLDER_KEY}" fi - echo " ]" >> "${OUTPUT_WORDS_LIST_TMP}" - echo " }" >> "${OUTPUT_WORDS_LIST_TMP}" + echo " ]" >>"${OUTPUT_WORDS_LIST_TMP}" + echo " }" >>"${OUTPUT_WORDS_LIST_TMP}" FIRST_WORD=0 fi done < <(cat "${SOURCE_CSV_FILE}" | sort | uniq) -echo " }" >> "${OUTPUT_WORDS_LIST_TMP}" -echo "}" >> "${OUTPUT_WORDS_LIST_TMP}" +echo " }" >>"${OUTPUT_WORDS_LIST_TMP}" +echo "}" >>"${OUTPUT_WORDS_LIST_TMP}" # Format json -cat "${OUTPUT_WORDS_LIST_TMP}" | jq > "${OUTPUT_WORDS_LIST}" +cat "${OUTPUT_WORDS_LIST_TMP}" | jq >"${OUTPUT_WORDS_LIST}" rm "${OUTPUT_WORDS_LIST_TMP}" # inject json file in app code diff --git a/resources/ui/build_ui_resources.sh b/resources/ui/build_ui_resources.sh index 4f365ed..4fa137a 100755 --- a/resources/ui/build_ui_resources.sh +++ b/resources/ui/build_ui_resources.sh @@ -1,9 +1,18 @@ #! /bin/bash # Check dependencies -command -v inkscape >/dev/null 2>&1 || { echo >&2 "I require inkscape but it's not installed. Aborting."; exit 1; } -command -v scour >/dev/null 2>&1 || { echo >&2 "I require scour but it's not installed. Aborting."; exit 1; } -command -v optipng >/dev/null 2>&1 || { echo >&2 "I require optipng but it's not installed. Aborting."; exit 1; } +command -v inkscape >/dev/null 2>&1 || { + echo >&2 "I require inkscape but it's not installed. Aborting." + exit 1 +} +command -v scour >/dev/null 2>&1 || { + echo >&2 "I require scour but it's not installed. Aborting." + exit 1 +} +command -v optipng >/dev/null 2>&1 || { + echo >&2 "I require optipng but it's not installed. Aborting." + exit 1 +} CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" BASE_DIR="$(dirname "$(dirname "${CURRENT_DIR}")")" @@ -40,14 +49,14 @@ function optimize_svg() { cp ${SOURCE} ${SOURCE}.tmp scour \ - --remove-descriptive-elements \ - --enable-id-stripping \ - --enable-viewboxing \ - --enable-comment-stripping \ - --nindent=4 \ - --quiet \ - -i ${SOURCE}.tmp \ - -o ${SOURCE} + --remove-descriptive-elements \ + --enable-id-stripping \ + --enable-viewboxing \ + --enable-comment-stripping \ + --nindent=4 \ + --quiet \ + -i ${SOURCE}.tmp \ + -o ${SOURCE} rm ${SOURCE}.tmp } @@ -68,10 +77,10 @@ function build_image() { mkdir -p "$(dirname "${TARGET}")" inkscape \ - --export-width=${ICON_SIZE} \ - --export-height=${ICON_SIZE} \ - --export-filename=${TARGET} \ - "${SOURCE}" + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET} \ + "${SOURCE}" optipng ${OPTIPNG_OPTIONS} "${TARGET}" } @@ -80,8 +89,7 @@ function build_image_for_skin() { SKIN_CODE="$1" # skin images - for SKIN_IMAGE in ${SKIN_IMAGES} - do + for SKIN_IMAGE in ${SKIN_IMAGES}; do build_image ${CURRENT_DIR}/skins/${SKIN_CODE}/${SKIN_IMAGE}.svg ${ASSETS_DIR}/skins/${SKIN_CODE}_${SKIN_IMAGE}.png done } @@ -97,14 +105,11 @@ if [ -d "${ASSETS_DIR}/skins" ]; then fi # build game images -for GAME_IMAGE in ${AVAILABLE_GAME_IMAGES} -do +for GAME_IMAGE in ${AVAILABLE_GAME_IMAGES}; do build_image ${CURRENT_DIR}/images/${GAME_IMAGE}.svg ${ASSETS_DIR}/ui/${GAME_IMAGE}.png done # build skins images -for SKIN in ${AVAILABLE_SKINS} -do +for SKIN in ${AVAILABLE_SKINS}; do build_image_for_skin "${SKIN}" done - diff --git a/resources/ui/images/button_back.svg b/resources/ui/images/button_back.svg index 2622a57..018d8b7 100644 --- a/resources/ui/images/button_back.svg +++ b/resources/ui/images/button_back.svg @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#e41578" stroke="#fff" stroke-width=".238"/><path d="m59.387 71.362c1.1248 1.1302 4.0012 1.1302 4.0012 0v-45.921c0-1.1316-2.8832-1.1316-4.0121 0l-37.693 20.918c-1.1289 1.1248-1.1479 2.9551-0.02171 4.084z" fill="#fefeff" stroke="#930e4e" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.257"/><path d="m57.857 68.048c0.96243 0.96706 3.4236 0.96706 3.4236 0v-39.292c0-0.96825-2.467-0.96825-3.4329 0l-32.252 17.898c-0.96594 0.96243-0.9822 2.5285-0.01858 3.4945z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.314"/></svg> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path transform="matrix(1.3783 .61747 -.61747 1.3783 45.198 93.762)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" fill="#fff" stroke="#950e4f" stroke-linecap="round" stroke-linejoin="round" stroke-width="7.2832"/></svg> diff --git a/resources/ui/images/button_delete_saved_game.svg b/resources/ui/images/button_delete_saved_game.svg index ac7eefe..c3f872e 100644 --- a/resources/ui/images/button_delete_saved_game.svg +++ b/resources/ui/images/button_delete_saved_game.svg @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#ee7d49" stroke="#fff" stroke-width=".238"/><path d="m61.07 35.601-1.7399 27.837c-0.13442 2.1535-1.9205 3.8312-4.0781 3.8312h-16.84c-2.1576 0-3.9437-1.6777-4.0781-3.8312l-1.7399-27.837h-2.6176c-0.84621 0-1.5323-0.68613-1.5323-1.5323 0-0.84655 0.68613-1.5323 1.5323-1.5323h33.711c0.84621 0 1.5323 0.68578 1.5323 1.5323 0 0.84621-0.68613 1.5323-1.5323 1.5323zm-3.2617 0h-21.953l1.4715 26.674c0.05985 1.0829 0.95531 1.9305 2.0403 1.9305h14.929c1.085 0 1.9804-0.84757 2.0403-1.9305zm-10.977 3.0647c0.78977 0 1.4301 0.6403 1.4301 1.4301v19.614c0 0.78977-0.6403 1.4301-1.4301 1.4301s-1.4301-0.6403-1.4301-1.4301v-19.614c0-0.78977 0.6403-1.4301 1.4301-1.4301zm-6.1293 0c0.80004 0 1.4588 0.62935 1.495 1.4286l0.89647 19.719c0.03182 0.70016-0.50998 1.2933-1.2101 1.3255-0.01915 7.02e-4 -0.03831 1e-3 -0.05781 1e-3 -0.74462 0-1.3596-0.58215-1.4003-1.3261l-1.0757-19.719c-0.0407-0.74701 0.53188-1.3852 1.2786-1.4259 0.02462-0.0014 0.04926-2e-3 0.07388-2e-3zm12.259 0c0.74804 0 1.3541 0.60609 1.3541 1.3541 0 0.02462-3.28e-4 0.04926-0.0017 0.07388l-1.0703 19.618c-0.04379 0.80106-0.70597 1.4281-1.5081 1.4281-0.74804 0-1.3541-0.60609-1.3541-1.3541 0-0.02462 3.49e-4 -0.04925 0.0017-0.07388l1.0703-19.618c0.04379-0.80106 0.70597-1.4281 1.5081-1.4281zm-10.216-12.259h8.1728c2.2567 0 4.086 1.8293 4.086 4.086v2.0433h-16.344v-2.0433c0-2.2567 1.8293-4.086 4.086-4.086zm0.20453 3.0647c-0.67725 0-1.2259 0.54863-1.2259 1.2259v1.8388h10.215v-1.8388c0-0.67725-0.54863-1.2259-1.2259-1.2259z" fill="#fff" fill-rule="evenodd" stroke="#bd4812" stroke-width=".75383"/></svg> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path d="m76.652 23.303-3.6441 58.302c-0.28153 4.5103-4.0223 8.0241-8.5413 8.0241h-35.27c-4.5189 0-8.2598-3.5138-8.5413-8.0241l-3.6441-58.302h-5.4824c-1.7723 0-3.2093-1.437-3.2093-3.2093 0-1.773 1.437-3.2093 3.2093-3.2093h70.605c1.7723 0 3.2093 1.4363 3.2093 3.2093 0 1.7723-1.437 3.2093-3.2093 3.2093zm-6.8314 0h-45.979l3.0819 55.867c0.12535 2.268 2.0008 4.0433 4.2732 4.0433h31.268c2.2724 0 4.1478-1.7752 4.2732-4.0433zm-22.99 6.4188c1.6541 0 2.9952 1.3411 2.9952 2.9952v41.08c0 1.6541-1.3411 2.9952-2.9952 2.9952-1.6542 0-2.9952-1.3411-2.9952-2.9952v-41.08c0-1.6541 1.3411-2.9952 2.9952-2.9952zm-12.837 0c1.6756 0 3.0553 1.3181 3.1312 2.9921l1.8776 41.3c0.06665 1.4664-1.0681 2.7087-2.5345 2.7762-0.04011 0.0015-0.08024 0.0021-0.12108 0.0021-1.5595 0-2.8476-1.2193-2.9328-2.7774l-2.253-41.3c-0.08524-1.5646 1.114-2.9012 2.6779-2.9864 0.05157-0.0029 0.10317-0.0042 0.15474-0.0042zm25.675 0c1.5667 0 2.8361 1.2694 2.8361 2.8361 0 0.05156-6.87e-4 0.10317-0.0036 0.15474l-2.2416 41.088c-0.09171 1.6778-1.4786 2.991-3.1586 2.991-1.5667 0-2.8361-1.2694-2.8361-2.8361 0-0.05156 7.31e-4 -0.10315 0.0036-0.15474l2.2417-41.088c0.09172-1.6778 1.4786-2.991 3.1586-2.991zm-21.397-25.675h17.117c4.7265 0 8.5578 3.8313 8.5578 8.5578v4.2795h-34.231v-4.2795c0-4.7265 3.8313-8.5578 8.5578-8.5578zm0.42837 6.4188c-1.4184 0-2.5675 1.1491-2.5675 2.5675v3.8512h21.394v-3.8512c0-1.4184-1.1491-2.5675-2.5675-2.5675z" fill="#fff" fill-rule="evenodd" stroke="#050200"/></svg> diff --git a/resources/ui/images/button_resume_game.svg b/resources/ui/images/button_resume_game.svg index 6ad8b64..2bf9732 100644 --- a/resources/ui/images/button_resume_game.svg +++ b/resources/ui/images/button_resume_game.svg @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#49a1ee" stroke="#fff" stroke-width=".238"/><path d="m39.211 31.236c-0.84086-0.84489-2.9911-0.84489-2.9911 0v34.329c0 0.84594 2.1554 0.84594 2.9993 0l28.178-15.637c0.84392-0.84086 0.85812-2.2091 0.01623-3.053z" fill="#fefeff" stroke="#105ca1" stroke-linecap="round" stroke-linejoin="round" stroke-width="6.1726"/><path d="m40.355 33.714c-0.71948-0.72294-2.5594-0.72294-2.5594 0v29.373c0 0.72383 1.8442 0.72383 2.5663 0l24.11-13.38c0.7221-0.71948 0.73426-1.8902 0.01389-2.6124z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.225"/><path d="m28.369 66.919v-37.591" fill="#105ca2" stroke="#105ca2" stroke-linecap="round" stroke-width="4.0337"/></svg> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><g transform="translate(-5.618)" fill="#fff" stroke="#105ea2" stroke-linecap="round" stroke-linejoin="round"><path transform="matrix(-1.3783 -.61747 .61747 -1.3783 55.567 -.086035)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" stroke-width="7.2832"/><path d="m15.535 12.852 2e-3 67.973z" stroke-width="11"/></g></svg> diff --git a/resources/ui/images/button_start.svg b/resources/ui/images/button_start.svg index e9d49d2..4d7634a 100644 --- a/resources/ui/images/button_start.svg +++ b/resources/ui/images/button_start.svg @@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?> -<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect x=".44662" y=".89101" width="92.772" height="91.894" ry="11.689" fill="#49a1ee" stroke="#fff" stroke-width=".238"/><path d="m34.852 25.44c-1.1248-1.1302-4.0012-1.1302-4.0012 0v45.921c0 1.1316 2.8832 1.1316 4.0121 0l37.693-20.918c1.1289-1.1248 1.1479-2.9551 0.02171-4.084z" fill="#fefeff" stroke="#105ca1" stroke-linecap="round" stroke-linejoin="round" stroke-width="8.257"/><path d="m36.382 28.754c-0.96243-0.96706-3.4236-0.96706-3.4236 0v39.292c0 0.96825 2.467 0.96825 3.4329 0l32.252-17.898c0.96594-0.96243 0.9822-2.5285 0.01858-3.4945z" fill="#fefeff" stroke="#feffff" stroke-linecap="round" stroke-linejoin="round" stroke-width="4.314"/></svg> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 93.665 93.676" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><path transform="matrix(-1.3783 -.61747 .61747 -1.3783 46.954 -.086035)" d="m11.645-14.603-44.77-4.6003 26.369-36.472z" fill="#fff" stroke="#105ea2" stroke-linecap="round" stroke-linejoin="round" stroke-width="7.2832"/></svg> diff --git a/resources/ui/images/type_pick-image.svg b/resources/ui/images/type_pick-image.svg index 4502ae0..6650aec 100644 --- a/resources/ui/images/type_pick-image.svg +++ b/resources/ui/images/type_pick-image.svg @@ -1,36 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> <svg version="1.1" viewBox="0 0 28.747 28.747" xmlns="http://www.w3.org/2000/svg"> - <g transform="translate(0,-1093.8)"> - <rect x="1.0155" y="1094.8" width="26.716" height="26.71" ry="0" fill="#6da6ad" stroke="#417076" stroke-width="1.9636"/> - </g> - <g transform="matrix(.6481 0 0 .6481 11.697 5.0582)"> - <rect x="7.2344" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <path d="m13.313 18.001-2.5559-2.5559c-0.1136-0.11359-0.28399-0.11359-0.3976 0l-1.2212 1.2212v-0.45438c0-0.17039-0.1136-0.28399-0.28399-0.28399s-0.28399 0.1136-0.28399 0.28399v1.0224l-0.76678 0.76678c-0.1136 0.1136-0.1136 0.28399 0 0.3976s0.28399 0.1136 0.3976 0l0.085198-0.0852v2.4424c0 0.17039 0.1136 0.28399 0.28399 0.28399h3.976c0.17039 0 0.28399-0.1136 0.28399-0.28399v-2.4424l0.0852 0.0852c0.1136 0.1136 0.28399 0.1136 0.3976 0s0.1136-0.28399 1e-6 -0.3976zm-3.0388 2.4708v-1.4199h0.56799v1.4199zm1.9879 0h-0.85198v-1.7039c0-0.17039-0.1136-0.28399-0.28399-0.28399h-1.136c-0.17039 0-0.28399 0.1136-0.28399 0.28399v1.7039h-0.85198v-2.7264l1.7039-1.7039 1.7039 1.7039z" fill="#3f51b5" stroke-width=".28399"/> - <path d="m9.6466 7.2228h1.8241c1.3364 0 2.4123 1.0759 2.4123 2.4123v1.8241c0 1.3364-1.0759 2.4123-2.4123 2.4123h-1.8241c-1.3364 0-2.4123-1.0759-2.4123-2.4123v-1.8241c0-1.3364 1.0759-2.4123 2.4123-2.4123z" fill="#fff" stroke="#fff" stroke-width=".581"/> - <g transform="matrix(.23892 0 0 .23892 7.6904 7.6801)" fill="#868686" stroke="#3f51b5"> - <path d="m12 24c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-23c-6.065 0-11 4.935-11 11s4.935 11 11 11 11-4.935 11-11-4.935-11-11-11z"/> - <path d="m11.535 12.184c-1.589-4.01-1.582-8.684 0.017-11.906l0.896 0.444c-1.479 2.98-1.472 7.335 0.017 11.094z"/> - <path d="m2.072 18.249-0.062-0.998c3.321-0.21 7.088-2.393 9.599-5.562l0.784 0.621c-2.68 3.381-6.73 5.712-10.321 5.939z"/> - <path d="m21.543 18.026c-1.842-2.771-5.616-4.942-9.616-5.532l0.146-0.989c4.267 0.629 8.311 2.971 10.302 5.968z"/> - <path d="m6.531 22.544-0.225-0.975c4.2-0.97 8.986-4.549 10.667-7.979l0.898 0.439c-1.797 3.667-6.884 7.487-11.34 8.515z"/> - <path d="m23.135 12.146c-2.941-3.153-8.435-5.512-12.245-5.248l-0.067-0.998c4.073-0.267 9.924 2.22 13.042 5.565z"/> - <path d="m7.306 16.069c-2.276-3.389-3.04-9.704-1.702-14.077l0.956 0.292c-1.261 4.122-0.554 10.056 1.576 13.229z"/> - </g> - <rect x="14.864" y="7.2228" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <switch transform="matrix(.064527 0 0 .064527 14.959 7.324)" fill="#3f51b5" stroke="#3f51b5"> - <g fill="#3f51b5" stroke="#3f51b5"> - <path d="m78.2 66c-0.6 0-13.9-1.2-22.5 6.7-1 0.9-2 2-2.8 3.1v-18.5h1.6c7.1 0 11.9-1.7 14.8-5.1 3.7-4.5 2.9-10.8 2-15.2-2.3-11.3 0.4-15.9 3.2-20.9l1.2-2.1c0.8-1.4 0.2-3.5-1.2-4.3-2.2-1.2-7.8 0.9-13.6 5.2-2.5-6.9-8.8-11.6-9.1-11.8-1.1-0.8-2.5-0.8-3.6 0-0.3 0.2-6.6 4.9-9.2 11.6-5.8-4.3-11.4-6.4-13.6-5.2-1.4 0.8-2 2.9-1.2 4.3l1.2 2.1c2.8 5 5.5 9.6 3.2 20.9-0.9 4.4-1.7 10.7 2 15.2 2.8 3.5 7.7 5.1 14.7 5.1h1.6v18.5c-0.8-1.1-1.7-2.1-2.8-3.1-8.5-7.6-21.8-6.5-22.3-6.5-1.6 0.1-2.7 1.4-2.7 3 0 0.6 0.2 13.9 8.8 21.7 6.6 6 15.9 6.7 20.2 6.7h4c4.3 0 13.6-0.8 20.2-6.7 8.5-7.8 8.7-21.1 8.7-21.7 0-1.5-1.2-2.8-2.8-3zm-28.2-56.6c2.1 1.9 5.3 5.6 6 9.6-2.2 2.1-4.2 4.4-5.9 7-1.7-2.6-3.8-4.9-6-7.1 0.6-3.9 3.8-7.5 5.9-9.5zm-14.7 38.9c-1.5-1.9-1.8-5.2-0.8-10.2 2-9.6 0.7-15.6-1.3-20.1 4 2.5 9.1 6.7 12.8 13 0.5 0.8 0.9 1.6 1.3 2.4 0.5 1 1.5 1.6 2.6 1.6s2.1-0.6 2.6-1.6c0.4-0.8 0.9-1.6 1.3-2.4 3.7-6.2 8.8-10.4 12.8-13-2 4.6-3.3 10.5-1.3 20.1 1 5 0.8 8.3-0.8 10.2s-5 2.9-10.1 2.9l-9.2-0.1c-4.9 0.1-8.3-0.9-9.9-2.8zm-3.5 38c-4.5-4.1-6-10.6-6.5-14.4 3.8 0.1 10.4 1 14.9 5.1s6 10.6 6.5 14.4c-3.8-0.1-10.3-1-14.9-5.1zm36.4 0c-4.5 4.1-11.1 5-14.9 5.1 0.5-3.8 2-10.2 6.6-14.3 4.5-4.1 11.1-5 14.9-5.1-0.6 3.7-2.1 10.2-6.6 14.3z" fill="#3f51b5" stroke="#3f51b5"/> + <g transform="matrix(1.2763 0 0 1.2763 -4.292 -3.9707)"> + <g transform="matrix(.6481 0 0 .6481 11.697 5.0582)"> + <rect x="7.2344" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <path d="m13.313 18.001-2.5559-2.5559c-0.1136-0.11359-0.28399-0.11359-0.3976 0l-1.2212 1.2212v-0.45438c0-0.17039-0.1136-0.28399-0.28399-0.28399s-0.28399 0.1136-0.28399 0.28399v1.0224l-0.76678 0.76678c-0.1136 0.1136-0.1136 0.28399 0 0.3976s0.28399 0.1136 0.3976 0l0.085198-0.0852v2.4424c0 0.17039 0.1136 0.28399 0.28399 0.28399h3.976c0.17039 0 0.28399-0.1136 0.28399-0.28399v-2.4424l0.0852 0.0852c0.1136 0.1136 0.28399 0.1136 0.3976 0s0.1136-0.28399 1e-6 -0.3976zm-3.0388 2.4708v-1.4199h0.56799v1.4199zm1.9879 0h-0.85198v-1.7039c0-0.17039-0.1136-0.28399-0.28399-0.28399h-1.136c-0.17039 0-0.28399 0.1136-0.28399 0.28399v1.7039h-0.85198v-2.7264l1.7039-1.7039 1.7039 1.7039z" fill="#3f51b5" stroke-width=".28399"/> + <path d="m9.6466 7.2228h1.8241c1.3364 0 2.4123 1.0759 2.4123 2.4123v1.8241c0 1.3364-1.0759 2.4123-2.4123 2.4123h-1.8241c-1.3364 0-2.4123-1.0759-2.4123-2.4123v-1.8241c0-1.3364 1.0759-2.4123 2.4123-2.4123z" fill="#fff" stroke="#fff" stroke-width=".581"/> + <g transform="matrix(.23892 0 0 .23892 7.6904 7.6801)" fill="#868686" stroke="#3f51b5"> + <path d="m12 24c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-23c-6.065 0-11 4.935-11 11s4.935 11 11 11 11-4.935 11-11-4.935-11-11-11z"/> + <path d="m11.535 12.184c-1.589-4.01-1.582-8.684 0.017-11.906l0.896 0.444c-1.479 2.98-1.472 7.335 0.017 11.094z"/> + <path d="m2.072 18.249-0.062-0.998c3.321-0.21 7.088-2.393 9.599-5.562l0.784 0.621c-2.68 3.381-6.73 5.712-10.321 5.939z"/> + <path d="m21.543 18.026c-1.842-2.771-5.616-4.942-9.616-5.532l0.146-0.989c4.267 0.629 8.311 2.971 10.302 5.968z"/> + <path d="m6.531 22.544-0.225-0.975c4.2-0.97 8.986-4.549 10.667-7.979l0.898 0.439c-1.797 3.667-6.884 7.487-11.34 8.515z"/> + <path d="m23.135 12.146c-2.941-3.153-8.435-5.512-12.245-5.248l-0.067-0.998c4.073-0.267 9.924 2.22 13.042 5.565z"/> + <path d="m7.306 16.069c-2.276-3.389-3.04-9.704-1.702-14.077l0.956 0.292c-1.261 4.122-0.554 10.056 1.576 13.229z"/> </g> - </switch> - <rect x="14.864" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <path d="m20.434 18.962c0.03938-0.18042 0.06222-0.37015 0.06222-0.57002 0-0.335-0.05822-0.64478-0.16547-0.92189 0.33937-0.63986 0.51574-1.1394 0.54953-1.5628 0.0043-0.05353-0.0141-0.10627-0.05039-0.14572-0.03649-0.03938-0.08776-0.06185-0.14134-0.06185-0.49193 0-0.96478 0.20178-1.4419 0.61032-0.31057-0.14474-0.66651-0.22572-1.058-0.22572s-0.74743 0.08104-1.058 0.22572c-0.47703-0.40861-0.94988-0.61032-1.4419-0.61032-0.0536 0-0.10486 0.02246-0.14129 0.0619-0.03636 0.03932-0.05464 0.09218-0.05039 0.14572 0.03379 0.42331 0.21015 0.92281 0.54953 1.5628-0.10732 0.2771-0.16547 0.58688-0.16547 0.92182 0 0.19988 0.02283 0.38959 0.06222 0.57002-0.1216 0.06277-0.23926 0.14117-0.36873 0.23673-0.08547 0.06308-0.10357 0.1835-0.04056 0.26892 0.03772 0.05113 0.09594 0.07815 0.1549 0.07815 0.03962 0 0.07963-0.01218 0.11397-0.03754 0.09138-0.06744 0.17305-0.12259 0.25371-0.16904 0.04819 0.12006 0.10658 0.23298 0.17292 0.33969-0.14018 0.05612-0.28849 0.14338-0.47162 0.29599-0.08159 0.06818-0.09261 0.18929-0.02461 0.27102 0.03803 0.04567 0.09268 0.06911 0.14781 0.06911 0.04338 0 0.08702-0.01465 0.12301-0.04449 0.19347-0.16122 0.32492-0.22917 0.47217-0.26966 0.40922 0.43919 1.0042 0.69875 1.7124 0.69875 0.70817 0 1.3032-0.25956 1.7124-0.69875 0.14726 0.04049 0.2787 0.10843 0.47217 0.26966 0.03594 0.02984 0.07963 0.04449 0.12301 0.04449 0.05513 0 0.10978-0.02344 0.14781-0.06911 0.068-0.08172 0.05698-0.20282-0.02462-0.27102-0.18307-0.15261-0.33144-0.23982-0.47162-0.29599 0.06627-0.10671 0.12474-0.21969 0.17291-0.33969 0.08067 0.04646 0.16234 0.1016 0.25371 0.16904 0.03434 0.02535 0.07433 0.03754 0.11397 0.03754 0.05896 0 0.11716-0.02702 0.15495-0.07815 0.06301-0.08547 0.04486-0.20584-0.04056-0.26892-0.12953-0.09557-0.24713-0.17397-0.36873-0.23673zm-3.2069-0.57002c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846zm1.3077 0.42866-0.30165 0.32092c-0.02461 0.02621-0.06455 0.02621-0.08917 0l-0.30165-0.32092c-0.08196-0.0872-0.02394-0.23636 0.09199-0.23636h0.50842c0.116 0 0.17409 0.1491 0.09206 0.23636zm0.61531-0.42866c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846z" fill="#3f51b5" stroke-width=".061538"/> - </g> - <g transform="matrix(1.3564 0 0 1.3564 -16.431 -4.2139)" fill="#fff" stroke-width=".27865" aria-label="ABC"> - <path d="m16.161 14.415h-0.74887l-0.10304 0.35121h-0.67195l0.79966-2.1276h0.71694l0.79966 2.1276h-0.68791zm-0.13787-0.46006-0.23511-0.76483-0.23366 0.76483z"/> - <path d="m17.166 12.638h1.2307q0.30768 0 0.47167 0.15239 0.16545 0.15239 0.16545 0.37734 0 0.18867-0.11755 0.32364-0.07837 0.08998-0.2293 0.14223 0.2293 0.05515 0.3367 0.19012 0.10885 0.13352 0.10885 0.3367 0 0.16545-0.07692 0.29752t-0.21044 0.20899q-0.08272 0.04789-0.24962 0.06966-0.22205 0.02903-0.29461 0.02903h-1.1349zm0.66324 0.83449h0.2859q0.15384 0 0.21334-0.05225 0.06095-0.0537 0.06095-0.15384 0-0.09288-0.06095-0.14513-0.0595-0.05225-0.20899-0.05225h-0.29026zm0 0.83594h0.33525q0.1698 0 0.23946-0.0595 0.06966-0.06095 0.06966-0.16254 0-0.09433-0.06966-0.15093-0.06821-0.05805-0.24092-0.05805h-0.3338z"/> - <path d="m20.892 13.897 0.57616 0.17416q-0.05805 0.24237-0.18286 0.40491t-0.31058 0.24527q-0.18432 0.08272-0.47022 0.08272-0.34686 0-0.56746-0.10014-0.21915-0.10159-0.37879-0.35557t-0.15964-0.65018q0-0.52827 0.2801-0.81127 0.28155-0.28445 0.79531-0.28445 0.40201 0 0.63131 0.16254 0.23076 0.16254 0.34251 0.49924l-0.58052 0.12916q-0.03048-0.09724-0.06386-0.14223-0.05515-0.07547-0.13497-0.1161-0.07982-0.04064-0.17851-0.04064-0.2235 0-0.34251 0.17996-0.08998 0.13352-0.08998 0.41942 0 0.35412 0.1074 0.48618 0.1074 0.13062 0.30187 0.13062 0.18867 0 0.28445-0.10594 0.09724-0.10594 0.14078-0.30767z"/> - </g> - <g transform="matrix(-.0023678 0 0 -.0023678 15.557 15.557)" fill="#fff"> - <path d="m380.5 100.5-350 350c-27.3 27.3-27.3 71.6 0 99l350 350c27.3 27.3 71.6 27.3 99 0 27.3-27.3 27.3-71.6 0-99l-230.5-230.5h671c38.7 0 70-31.3 70-70s-31.3-70-70-70h-671l230.5-230.5c13.7-13.7 20.5-31.6 20.5-49.5s-6.8-35.8-20.5-49.5c-27.4-27.3-71.7-27.3-99 0z" fill="#fff"/> + <rect x="14.864" y="7.2228" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <switch transform="matrix(.064527 0 0 .064527 14.959 7.324)" fill="#3f51b5" stroke="#3f51b5"> + <g fill="#3f51b5" stroke="#3f51b5"> + <path d="m78.2 66c-0.6 0-13.9-1.2-22.5 6.7-1 0.9-2 2-2.8 3.1v-18.5h1.6c7.1 0 11.9-1.7 14.8-5.1 3.7-4.5 2.9-10.8 2-15.2-2.3-11.3 0.4-15.9 3.2-20.9l1.2-2.1c0.8-1.4 0.2-3.5-1.2-4.3-2.2-1.2-7.8 0.9-13.6 5.2-2.5-6.9-8.8-11.6-9.1-11.8-1.1-0.8-2.5-0.8-3.6 0-0.3 0.2-6.6 4.9-9.2 11.6-5.8-4.3-11.4-6.4-13.6-5.2-1.4 0.8-2 2.9-1.2 4.3l1.2 2.1c2.8 5 5.5 9.6 3.2 20.9-0.9 4.4-1.7 10.7 2 15.2 2.8 3.5 7.7 5.1 14.7 5.1h1.6v18.5c-0.8-1.1-1.7-2.1-2.8-3.1-8.5-7.6-21.8-6.5-22.3-6.5-1.6 0.1-2.7 1.4-2.7 3 0 0.6 0.2 13.9 8.8 21.7 6.6 6 15.9 6.7 20.2 6.7h4c4.3 0 13.6-0.8 20.2-6.7 8.5-7.8 8.7-21.1 8.7-21.7 0-1.5-1.2-2.8-2.8-3zm-28.2-56.6c2.1 1.9 5.3 5.6 6 9.6-2.2 2.1-4.2 4.4-5.9 7-1.7-2.6-3.8-4.9-6-7.1 0.6-3.9 3.8-7.5 5.9-9.5zm-14.7 38.9c-1.5-1.9-1.8-5.2-0.8-10.2 2-9.6 0.7-15.6-1.3-20.1 4 2.5 9.1 6.7 12.8 13 0.5 0.8 0.9 1.6 1.3 2.4 0.5 1 1.5 1.6 2.6 1.6s2.1-0.6 2.6-1.6c0.4-0.8 0.9-1.6 1.3-2.4 3.7-6.2 8.8-10.4 12.8-13-2 4.6-3.3 10.5-1.3 20.1 1 5 0.8 8.3-0.8 10.2s-5 2.9-10.1 2.9l-9.2-0.1c-4.9 0.1-8.3-0.9-9.9-2.8zm-3.5 38c-4.5-4.1-6-10.6-6.5-14.4 3.8 0.1 10.4 1 14.9 5.1s6 10.6 6.5 14.4c-3.8-0.1-10.3-1-14.9-5.1zm36.4 0c-4.5 4.1-11.1 5-14.9 5.1 0.5-3.8 2-10.2 6.6-14.3 4.5-4.1 11.1-5 14.9-5.1-0.6 3.7-2.1 10.2-6.6 14.3z" fill="#3f51b5" stroke="#3f51b5"/> + </g> + </switch> + <rect x="14.864" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <path d="m20.434 18.962c0.03938-0.18042 0.06222-0.37015 0.06222-0.57002 0-0.335-0.05822-0.64478-0.16547-0.92189 0.33937-0.63986 0.51574-1.1394 0.54953-1.5628 0.0043-0.05353-0.0141-0.10627-0.05039-0.14572-0.03649-0.03938-0.08776-0.06185-0.14134-0.06185-0.49193 0-0.96478 0.20178-1.4419 0.61032-0.31057-0.14474-0.66651-0.22572-1.058-0.22572s-0.74743 0.08104-1.058 0.22572c-0.47703-0.40861-0.94988-0.61032-1.4419-0.61032-0.0536 0-0.10486 0.02246-0.14129 0.0619-0.03636 0.03932-0.05464 0.09218-0.05039 0.14572 0.03379 0.42331 0.21015 0.92281 0.54953 1.5628-0.10732 0.2771-0.16547 0.58688-0.16547 0.92182 0 0.19988 0.02283 0.38959 0.06222 0.57002-0.1216 0.06277-0.23926 0.14117-0.36873 0.23673-0.08547 0.06308-0.10357 0.1835-0.04056 0.26892 0.03772 0.05113 0.09594 0.07815 0.1549 0.07815 0.03962 0 0.07963-0.01218 0.11397-0.03754 0.09138-0.06744 0.17305-0.12259 0.25371-0.16904 0.04819 0.12006 0.10658 0.23298 0.17292 0.33969-0.14018 0.05612-0.28849 0.14338-0.47162 0.29599-0.08159 0.06818-0.09261 0.18929-0.02461 0.27102 0.03803 0.04567 0.09268 0.06911 0.14781 0.06911 0.04338 0 0.08702-0.01465 0.12301-0.04449 0.19347-0.16122 0.32492-0.22917 0.47217-0.26966 0.40922 0.43919 1.0042 0.69875 1.7124 0.69875 0.70817 0 1.3032-0.25956 1.7124-0.69875 0.14726 0.04049 0.2787 0.10843 0.47217 0.26966 0.03594 0.02984 0.07963 0.04449 0.12301 0.04449 0.05513 0 0.10978-0.02344 0.14781-0.06911 0.068-0.08172 0.05698-0.20282-0.02462-0.27102-0.18307-0.15261-0.33144-0.23982-0.47162-0.29599 0.06627-0.10671 0.12474-0.21969 0.17291-0.33969 0.08067 0.04646 0.16234 0.1016 0.25371 0.16904 0.03434 0.02535 0.07433 0.03754 0.11397 0.03754 0.05896 0 0.11716-0.02702 0.15495-0.07815 0.06301-0.08547 0.04486-0.20584-0.04056-0.26892-0.12953-0.09557-0.24713-0.17397-0.36873-0.23673zm-3.2069-0.57002c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846zm1.3077 0.42866-0.30165 0.32092c-0.02461 0.02621-0.06455 0.02621-0.08917 0l-0.30165-0.32092c-0.08196-0.0872-0.02394-0.23636 0.09199-0.23636h0.50842c0.116 0 0.17409 0.1491 0.09206 0.23636zm0.61531-0.42866c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846z" fill="#3f51b5" stroke-width=".061538"/> + </g> + <g transform="matrix(1.3564,0,0,1.3564,-16.431,-4.2139)" fill="#fff" stroke-width=".27865" aria-label="ABC"> + <path d="m16.161 14.415h-0.74887l-0.10304 0.35121h-0.67195l0.79966-2.1276h0.71694l0.79966 2.1276h-0.68791zm-0.13787-0.46006-0.23511-0.76483-0.23366 0.76483z"/> + <path d="m17.166 12.638h1.2307q0.30768 0 0.47167 0.15239 0.16545 0.15239 0.16545 0.37734 0 0.18867-0.11755 0.32364-0.07837 0.08998-0.2293 0.14223 0.2293 0.05515 0.3367 0.19012 0.10885 0.13352 0.10885 0.3367 0 0.16545-0.07692 0.29752t-0.21044 0.20899q-0.08272 0.04789-0.24962 0.06966-0.22205 0.02903-0.29461 0.02903h-1.1349zm0.66324 0.83449h0.2859q0.15384 0 0.21334-0.05225 0.06095-0.0537 0.06095-0.15384 0-0.09288-0.06095-0.14513-0.0595-0.05225-0.20899-0.05225h-0.29026zm0 0.83594h0.33525q0.1698 0 0.23946-0.0595 0.06966-0.06095 0.06966-0.16254 0-0.09433-0.06966-0.15093-0.06821-0.05805-0.24092-0.05805h-0.3338z"/> + <path d="m20.892 13.897 0.57616 0.17416q-0.05805 0.24237-0.18286 0.40491t-0.31058 0.24527q-0.18432 0.08272-0.47022 0.08272-0.34686 0-0.56746-0.10014-0.21915-0.10159-0.37879-0.35557t-0.15964-0.65018q0-0.52827 0.2801-0.81127 0.28155-0.28445 0.79531-0.28445 0.40201 0 0.63131 0.16254 0.23076 0.16254 0.34251 0.49924l-0.58052 0.12916q-0.03048-0.09724-0.06386-0.14223-0.05515-0.07547-0.13497-0.1161-0.07982-0.04064-0.17851-0.04064-0.2235 0-0.34251 0.17996-0.08998 0.13352-0.08998 0.41942 0 0.35412 0.1074 0.48618 0.1074 0.13062 0.30187 0.13062 0.18867 0 0.28445-0.10594 0.09724-0.10594 0.14078-0.30767z"/> + </g> + <g transform="matrix(-.0023678 0 0 -.0023678 15.557 15.557)" fill="#fff"> + <path d="m380.5 100.5-350 350c-27.3 27.3-27.3 71.6 0 99l350 350c27.3 27.3 71.6 27.3 99 0 27.3-27.3 27.3-71.6 0-99l-230.5-230.5h671c38.7 0 70-31.3 70-70s-31.3-70-70-70h-671l230.5-230.5c13.7-13.7 20.5-31.6 20.5-49.5s-6.8-35.8-20.5-49.5c-27.4-27.3-71.7-27.3-99 0z" fill="#fff"/> + </g> </g> </svg> diff --git a/resources/ui/images/type_pick-word.svg b/resources/ui/images/type_pick-word.svg index 6714b7a..56ce77a 100644 --- a/resources/ui/images/type_pick-word.svg +++ b/resources/ui/images/type_pick-word.svg @@ -1,36 +1,35 @@ <?xml version="1.0" encoding="UTF-8"?> <svg version="1.1" viewBox="0 0 28.747 28.747" xmlns="http://www.w3.org/2000/svg"> - <g transform="translate(0,-1093.8)"> - <rect x="1.0155" y="1094.8" width="26.716" height="26.71" ry="0" fill="#6da6ad" stroke="#417076" stroke-width="1.9636"/> - </g> - <g transform="matrix(.6481 0 0 .6481 -1.4195 5.0582)"> - <rect x="7.2344" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <path d="m13.313 18.001-2.5559-2.5559c-0.1136-0.11359-0.28399-0.11359-0.3976 0l-1.2212 1.2212v-0.45438c0-0.17039-0.1136-0.28399-0.28399-0.28399s-0.28399 0.1136-0.28399 0.28399v1.0224l-0.76678 0.76678c-0.1136 0.1136-0.1136 0.28399 0 0.3976s0.28399 0.1136 0.3976 0l0.085198-0.0852v2.4424c0 0.17039 0.1136 0.28399 0.28399 0.28399h3.976c0.17039 0 0.28399-0.1136 0.28399-0.28399v-2.4424l0.0852 0.0852c0.1136 0.1136 0.28399 0.1136 0.3976 0s0.1136-0.28399 1e-6 -0.3976zm-3.0388 2.4708v-1.4199h0.56799v1.4199zm1.9879 0h-0.85198v-1.7039c0-0.17039-0.1136-0.28399-0.28399-0.28399h-1.136c-0.17039 0-0.28399 0.1136-0.28399 0.28399v1.7039h-0.85198v-2.7264l1.7039-1.7039 1.7039 1.7039z" fill="#3f51b5" stroke-width=".28399"/> - <path d="m9.6466 7.2228h1.8241c1.3364 0 2.4123 1.0759 2.4123 2.4123v1.8241c0 1.3364-1.0759 2.4123-2.4123 2.4123h-1.8241c-1.3364 0-2.4123-1.0759-2.4123-2.4123v-1.8241c0-1.3364 1.0759-2.4123 2.4123-2.4123z" fill="#fff" stroke="#fff" stroke-width=".581"/> - <g transform="matrix(.23892 0 0 .23892 7.6904 7.6801)" fill="#868686" stroke="#3f51b5"> - <path d="m12 24c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-23c-6.065 0-11 4.935-11 11s4.935 11 11 11 11-4.935 11-11-4.935-11-11-11z"/> - <path d="m11.535 12.184c-1.589-4.01-1.582-8.684 0.017-11.906l0.896 0.444c-1.479 2.98-1.472 7.335 0.017 11.094z"/> - <path d="m2.072 18.249-0.062-0.998c3.321-0.21 7.088-2.393 9.599-5.562l0.784 0.621c-2.68 3.381-6.73 5.712-10.321 5.939z"/> - <path d="m21.543 18.026c-1.842-2.771-5.616-4.942-9.616-5.532l0.146-0.989c4.267 0.629 8.311 2.971 10.302 5.968z"/> - <path d="m6.531 22.544-0.225-0.975c4.2-0.97 8.986-4.549 10.667-7.979l0.898 0.439c-1.797 3.667-6.884 7.487-11.34 8.515z"/> - <path d="m23.135 12.146c-2.941-3.153-8.435-5.512-12.245-5.248l-0.067-0.998c4.073-0.267 9.924 2.22 13.042 5.565z"/> - <path d="m7.306 16.069c-2.276-3.389-3.04-9.704-1.702-14.077l0.956 0.292c-1.261 4.122-0.554 10.056 1.576 13.229z"/> - </g> - <rect x="14.864" y="7.2228" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <switch transform="matrix(.064527 0 0 .064527 14.959 7.324)" fill="#3f51b5" stroke="#3f51b5"> - <g fill="#3f51b5" stroke="#3f51b5"> - <path d="m78.2 66c-0.6 0-13.9-1.2-22.5 6.7-1 0.9-2 2-2.8 3.1v-18.5h1.6c7.1 0 11.9-1.7 14.8-5.1 3.7-4.5 2.9-10.8 2-15.2-2.3-11.3 0.4-15.9 3.2-20.9l1.2-2.1c0.8-1.4 0.2-3.5-1.2-4.3-2.2-1.2-7.8 0.9-13.6 5.2-2.5-6.9-8.8-11.6-9.1-11.8-1.1-0.8-2.5-0.8-3.6 0-0.3 0.2-6.6 4.9-9.2 11.6-5.8-4.3-11.4-6.4-13.6-5.2-1.4 0.8-2 2.9-1.2 4.3l1.2 2.1c2.8 5 5.5 9.6 3.2 20.9-0.9 4.4-1.7 10.7 2 15.2 2.8 3.5 7.7 5.1 14.7 5.1h1.6v18.5c-0.8-1.1-1.7-2.1-2.8-3.1-8.5-7.6-21.8-6.5-22.3-6.5-1.6 0.1-2.7 1.4-2.7 3 0 0.6 0.2 13.9 8.8 21.7 6.6 6 15.9 6.7 20.2 6.7h4c4.3 0 13.6-0.8 20.2-6.7 8.5-7.8 8.7-21.1 8.7-21.7 0-1.5-1.2-2.8-2.8-3zm-28.2-56.6c2.1 1.9 5.3 5.6 6 9.6-2.2 2.1-4.2 4.4-5.9 7-1.7-2.6-3.8-4.9-6-7.1 0.6-3.9 3.8-7.5 5.9-9.5zm-14.7 38.9c-1.5-1.9-1.8-5.2-0.8-10.2 2-9.6 0.7-15.6-1.3-20.1 4 2.5 9.1 6.7 12.8 13 0.5 0.8 0.9 1.6 1.3 2.4 0.5 1 1.5 1.6 2.6 1.6s2.1-0.6 2.6-1.6c0.4-0.8 0.9-1.6 1.3-2.4 3.7-6.2 8.8-10.4 12.8-13-2 4.6-3.3 10.5-1.3 20.1 1 5 0.8 8.3-0.8 10.2s-5 2.9-10.1 2.9l-9.2-0.1c-4.9 0.1-8.3-0.9-9.9-2.8zm-3.5 38c-4.5-4.1-6-10.6-6.5-14.4 3.8 0.1 10.4 1 14.9 5.1s6 10.6 6.5 14.4c-3.8-0.1-10.3-1-14.9-5.1zm36.4 0c-4.5 4.1-11.1 5-14.9 5.1 0.5-3.8 2-10.2 6.6-14.3 4.5-4.1 11.1-5 14.9-5.1-0.6 3.7-2.1 10.2-6.6 14.3z" fill="#3f51b5" stroke="#3f51b5"/> + <g transform="matrix(1.273 0 0 1.273 -3.8507 -3.9246)"> + <g transform="matrix(.6481 0 0 .6481 -1.4195 5.0582)"> + <rect x="7.2344" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <path d="m13.313 18.001-2.5559-2.5559c-0.1136-0.11359-0.28399-0.11359-0.3976 0l-1.2212 1.2212v-0.45438c0-0.17039-0.1136-0.28399-0.28399-0.28399s-0.28399 0.1136-0.28399 0.28399v1.0224l-0.76678 0.76678c-0.1136 0.1136-0.1136 0.28399 0 0.3976s0.28399 0.1136 0.3976 0l0.085198-0.0852v2.4424c0 0.17039 0.1136 0.28399 0.28399 0.28399h3.976c0.17039 0 0.28399-0.1136 0.28399-0.28399v-2.4424l0.0852 0.0852c0.1136 0.1136 0.28399 0.1136 0.3976 0s0.1136-0.28399 1e-6 -0.3976zm-3.0388 2.4708v-1.4199h0.56799v1.4199zm1.9879 0h-0.85198v-1.7039c0-0.17039-0.1136-0.28399-0.28399-0.28399h-1.136c-0.17039 0-0.28399 0.1136-0.28399 0.28399v1.7039h-0.85198v-2.7264l1.7039-1.7039 1.7039 1.7039z" fill="#3f51b5" stroke-width=".28399"/> + <path d="m9.6466 7.2228h1.8241c1.3364 0 2.4123 1.0759 2.4123 2.4123v1.8241c0 1.3364-1.0759 2.4123-2.4123 2.4123h-1.8241c-1.3364 0-2.4123-1.0759-2.4123-2.4123v-1.8241c0-1.3364 1.0759-2.4123 2.4123-2.4123z" fill="#fff" stroke="#fff" stroke-width=".581"/> + <g transform="matrix(.23892 0 0 .23892 7.6904 7.6801)" fill="#868686" stroke="#3f51b5"> + <path d="m12 24c-6.617 0-12-5.383-12-12s5.383-12 12-12 12 5.383 12 12-5.383 12-12 12zm0-23c-6.065 0-11 4.935-11 11s4.935 11 11 11 11-4.935 11-11-4.935-11-11-11z"/> + <path d="m11.535 12.184c-1.589-4.01-1.582-8.684 0.017-11.906l0.896 0.444c-1.479 2.98-1.472 7.335 0.017 11.094z"/> + <path d="m2.072 18.249-0.062-0.998c3.321-0.21 7.088-2.393 9.599-5.562l0.784 0.621c-2.68 3.381-6.73 5.712-10.321 5.939z"/> + <path d="m21.543 18.026c-1.842-2.771-5.616-4.942-9.616-5.532l0.146-0.989c4.267 0.629 8.311 2.971 10.302 5.968z"/> + <path d="m6.531 22.544-0.225-0.975c4.2-0.97 8.986-4.549 10.667-7.979l0.898 0.439c-1.797 3.667-6.884 7.487-11.34 8.515z"/> + <path d="m23.135 12.146c-2.941-3.153-8.435-5.512-12.245-5.248l-0.067-0.998c4.073-0.267 9.924 2.22 13.042 5.565z"/> + <path d="m7.306 16.069c-2.276-3.389-3.04-9.704-1.702-14.077l0.956 0.292c-1.261 4.122-0.554 10.056 1.576 13.229z"/> </g> - </switch> - <rect x="14.864" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> - <path d="m20.434 18.962c0.03938-0.18042 0.06222-0.37015 0.06222-0.57002 0-0.335-0.05822-0.64478-0.16547-0.92189 0.33937-0.63986 0.51574-1.1394 0.54953-1.5628 0.0043-0.05353-0.0141-0.10627-0.05039-0.14572-0.03649-0.03938-0.08776-0.06185-0.14134-0.06185-0.49193 0-0.96478 0.20178-1.4419 0.61032-0.31057-0.14474-0.66651-0.22572-1.058-0.22572s-0.74743 0.08104-1.058 0.22572c-0.47703-0.40861-0.94988-0.61032-1.4419-0.61032-0.0536 0-0.10486 0.02246-0.14129 0.0619-0.03636 0.03932-0.05464 0.09218-0.05039 0.14572 0.03379 0.42331 0.21015 0.92281 0.54953 1.5628-0.10732 0.2771-0.16547 0.58688-0.16547 0.92182 0 0.19988 0.02283 0.38959 0.06222 0.57002-0.1216 0.06277-0.23926 0.14117-0.36873 0.23673-0.08547 0.06308-0.10357 0.1835-0.04056 0.26892 0.03772 0.05113 0.09594 0.07815 0.1549 0.07815 0.03962 0 0.07963-0.01218 0.11397-0.03754 0.09138-0.06744 0.17305-0.12259 0.25371-0.16904 0.04819 0.12006 0.10658 0.23298 0.17292 0.33969-0.14018 0.05612-0.28849 0.14338-0.47162 0.29599-0.08159 0.06818-0.09261 0.18929-0.02461 0.27102 0.03803 0.04567 0.09268 0.06911 0.14781 0.06911 0.04338 0 0.08702-0.01465 0.12301-0.04449 0.19347-0.16122 0.32492-0.22917 0.47217-0.26966 0.40922 0.43919 1.0042 0.69875 1.7124 0.69875 0.70817 0 1.3032-0.25956 1.7124-0.69875 0.14726 0.04049 0.2787 0.10843 0.47217 0.26966 0.03594 0.02984 0.07963 0.04449 0.12301 0.04449 0.05513 0 0.10978-0.02344 0.14781-0.06911 0.068-0.08172 0.05698-0.20282-0.02462-0.27102-0.18307-0.15261-0.33144-0.23982-0.47162-0.29599 0.06627-0.10671 0.12474-0.21969 0.17291-0.33969 0.08067 0.04646 0.16234 0.1016 0.25371 0.16904 0.03434 0.02535 0.07433 0.03754 0.11397 0.03754 0.05896 0 0.11716-0.02702 0.15495-0.07815 0.06301-0.08547 0.04486-0.20584-0.04056-0.26892-0.12953-0.09557-0.24713-0.17397-0.36873-0.23673zm-3.2069-0.57002c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846zm1.3077 0.42866-0.30165 0.32092c-0.02461 0.02621-0.06455 0.02621-0.08917 0l-0.30165-0.32092c-0.08196-0.0872-0.02394-0.23636 0.09199-0.23636h0.50842c0.116 0 0.17409 0.1491 0.09206 0.23636zm0.61531-0.42866c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846z" fill="#3f51b5" stroke-width=".061538"/> - </g> - <g transform="matrix(1.3564 0 0 1.3564 -3.5693 -4.2139)" fill="#fff" stroke-width=".27865" aria-label="ABC"> - <path d="m16.161 14.415h-0.74887l-0.10304 0.35121h-0.67195l0.79966-2.1276h0.71694l0.79966 2.1276h-0.68791zm-0.13787-0.46006-0.23511-0.76483-0.23366 0.76483z"/> - <path d="m17.166 12.638h1.2307q0.30768 0 0.47167 0.15239 0.16545 0.15239 0.16545 0.37734 0 0.18867-0.11755 0.32364-0.07837 0.08998-0.2293 0.14223 0.2293 0.05515 0.3367 0.19012 0.10885 0.13352 0.10885 0.3367 0 0.16545-0.07692 0.29752t-0.21044 0.20899q-0.08272 0.04789-0.24962 0.06966-0.22205 0.02903-0.29461 0.02903h-1.1349zm0.66324 0.83449h0.2859q0.15384 0 0.21334-0.05225 0.06095-0.0537 0.06095-0.15384 0-0.09288-0.06095-0.14513-0.0595-0.05225-0.20899-0.05225h-0.29026zm0 0.83594h0.33525q0.1698 0 0.23946-0.0595 0.06966-0.06095 0.06966-0.16254 0-0.09433-0.06966-0.15093-0.06821-0.05805-0.24092-0.05805h-0.3338z"/> - <path d="m20.892 13.897 0.57616 0.17416q-0.05805 0.24237-0.18286 0.40491t-0.31058 0.24527q-0.18432 0.08272-0.47022 0.08272-0.34686 0-0.56746-0.10014-0.21915-0.10159-0.37879-0.35557t-0.15964-0.65018q0-0.52827 0.2801-0.81127 0.28155-0.28445 0.79531-0.28445 0.40201 0 0.63131 0.16254 0.23076 0.16254 0.34251 0.49924l-0.58052 0.12916q-0.03048-0.09724-0.06386-0.14223-0.05515-0.07547-0.13497-0.1161-0.07982-0.04064-0.17851-0.04064-0.2235 0-0.34251 0.17996-0.08998 0.13352-0.08998 0.41942 0 0.35412 0.1074 0.48618 0.1074 0.13062 0.30187 0.13062 0.18867 0 0.28445-0.10594 0.09724-0.10594 0.14078-0.30767z"/> - </g> - <g transform="matrix(-.0023678 0 0 -.0023678 15.557 15.557)" fill="#fff"> - <path d="m380.5 100.5-350 350c-27.3 27.3-27.3 71.6 0 99l350 350c27.3 27.3 71.6 27.3 99 0 27.3-27.3 27.3-71.6 0-99l-230.5-230.5h671c38.7 0 70-31.3 70-70s-31.3-70-70-70h-671l230.5-230.5c13.7-13.7 20.5-31.6 20.5-49.5s-6.8-35.8-20.5-49.5c-27.4-27.3-71.7-27.3-99 0z" fill="#fff"/> + <rect x="14.864" y="7.2228" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <switch transform="matrix(.064527 0 0 .064527 14.959 7.324)" fill="#3f51b5" stroke="#3f51b5"> + <g fill="#3f51b5" stroke="#3f51b5"> + <path d="m78.2 66c-0.6 0-13.9-1.2-22.5 6.7-1 0.9-2 2-2.8 3.1v-18.5h1.6c7.1 0 11.9-1.7 14.8-5.1 3.7-4.5 2.9-10.8 2-15.2-2.3-11.3 0.4-15.9 3.2-20.9l1.2-2.1c0.8-1.4 0.2-3.5-1.2-4.3-2.2-1.2-7.8 0.9-13.6 5.2-2.5-6.9-8.8-11.6-9.1-11.8-1.1-0.8-2.5-0.8-3.6 0-0.3 0.2-6.6 4.9-9.2 11.6-5.8-4.3-11.4-6.4-13.6-5.2-1.4 0.8-2 2.9-1.2 4.3l1.2 2.1c2.8 5 5.5 9.6 3.2 20.9-0.9 4.4-1.7 10.7 2 15.2 2.8 3.5 7.7 5.1 14.7 5.1h1.6v18.5c-0.8-1.1-1.7-2.1-2.8-3.1-8.5-7.6-21.8-6.5-22.3-6.5-1.6 0.1-2.7 1.4-2.7 3 0 0.6 0.2 13.9 8.8 21.7 6.6 6 15.9 6.7 20.2 6.7h4c4.3 0 13.6-0.8 20.2-6.7 8.5-7.8 8.7-21.1 8.7-21.7 0-1.5-1.2-2.8-2.8-3zm-28.2-56.6c2.1 1.9 5.3 5.6 6 9.6-2.2 2.1-4.2 4.4-5.9 7-1.7-2.6-3.8-4.9-6-7.1 0.6-3.9 3.8-7.5 5.9-9.5zm-14.7 38.9c-1.5-1.9-1.8-5.2-0.8-10.2 2-9.6 0.7-15.6-1.3-20.1 4 2.5 9.1 6.7 12.8 13 0.5 0.8 0.9 1.6 1.3 2.4 0.5 1 1.5 1.6 2.6 1.6s2.1-0.6 2.6-1.6c0.4-0.8 0.9-1.6 1.3-2.4 3.7-6.2 8.8-10.4 12.8-13-2 4.6-3.3 10.5-1.3 20.1 1 5 0.8 8.3-0.8 10.2s-5 2.9-10.1 2.9l-9.2-0.1c-4.9 0.1-8.3-0.9-9.9-2.8zm-3.5 38c-4.5-4.1-6-10.6-6.5-14.4 3.8 0.1 10.4 1 14.9 5.1s6 10.6 6.5 14.4c-3.8-0.1-10.3-1-14.9-5.1zm36.4 0c-4.5 4.1-11.1 5-14.9 5.1 0.5-3.8 2-10.2 6.6-14.3 4.5-4.1 11.1-5 14.9-5.1-0.6 3.7-2.1 10.2-6.6 14.3z" fill="#3f51b5" stroke="#3f51b5"/> + </g> + </switch> + <rect x="14.864" y="14.875" width="6.6486" height="6.6486" ry="2.4123" fill="#fff" stroke="#fff" stroke-width=".581"/> + <path d="m20.434 18.962c0.03938-0.18042 0.06222-0.37015 0.06222-0.57002 0-0.335-0.05822-0.64478-0.16547-0.92189 0.33937-0.63986 0.51574-1.1394 0.54953-1.5628 0.0043-0.05353-0.0141-0.10627-0.05039-0.14572-0.03649-0.03938-0.08776-0.06185-0.14134-0.06185-0.49193 0-0.96478 0.20178-1.4419 0.61032-0.31057-0.14474-0.66651-0.22572-1.058-0.22572s-0.74743 0.08104-1.058 0.22572c-0.47703-0.40861-0.94988-0.61032-1.4419-0.61032-0.0536 0-0.10486 0.02246-0.14129 0.0619-0.03636 0.03932-0.05464 0.09218-0.05039 0.14572 0.03379 0.42331 0.21015 0.92281 0.54953 1.5628-0.10732 0.2771-0.16547 0.58688-0.16547 0.92182 0 0.19988 0.02283 0.38959 0.06222 0.57002-0.1216 0.06277-0.23926 0.14117-0.36873 0.23673-0.08547 0.06308-0.10357 0.1835-0.04056 0.26892 0.03772 0.05113 0.09594 0.07815 0.1549 0.07815 0.03962 0 0.07963-0.01218 0.11397-0.03754 0.09138-0.06744 0.17305-0.12259 0.25371-0.16904 0.04819 0.12006 0.10658 0.23298 0.17292 0.33969-0.14018 0.05612-0.28849 0.14338-0.47162 0.29599-0.08159 0.06818-0.09261 0.18929-0.02461 0.27102 0.03803 0.04567 0.09268 0.06911 0.14781 0.06911 0.04338 0 0.08702-0.01465 0.12301-0.04449 0.19347-0.16122 0.32492-0.22917 0.47217-0.26966 0.40922 0.43919 1.0042 0.69875 1.7124 0.69875 0.70817 0 1.3032-0.25956 1.7124-0.69875 0.14726 0.04049 0.2787 0.10843 0.47217 0.26966 0.03594 0.02984 0.07963 0.04449 0.12301 0.04449 0.05513 0 0.10978-0.02344 0.14781-0.06911 0.068-0.08172 0.05698-0.20282-0.02462-0.27102-0.18307-0.15261-0.33144-0.23982-0.47162-0.29599 0.06627-0.10671 0.12474-0.21969 0.17291-0.33969 0.08067 0.04646 0.16234 0.1016 0.25371 0.16904 0.03434 0.02535 0.07433 0.03754 0.11397 0.03754 0.05896 0 0.11716-0.02702 0.15495-0.07815 0.06301-0.08547 0.04486-0.20584-0.04056-0.26892-0.12953-0.09557-0.24713-0.17397-0.36873-0.23673zm-3.2069-0.57002c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846zm1.3077 0.42866-0.30165 0.32092c-0.02461 0.02621-0.06455 0.02621-0.08917 0l-0.30165-0.32092c-0.08196-0.0872-0.02394-0.23636 0.09199-0.23636h0.50842c0.116 0 0.17409 0.1491 0.09206 0.23636zm0.61531-0.42866c-0.21211 0-0.3846-0.17261-0.3846-0.3846 0-0.21211 0.17249-0.3846 0.3846-0.3846s0.3846 0.17249 0.3846 0.3846c0 0.21199-0.17249 0.3846-0.3846 0.3846z" fill="#3f51b5" stroke-width=".061538"/> + </g> + <g transform="matrix(1.3564,0,0,1.3564,-3.5693,-4.2139)" fill="#fff" stroke-width=".27865" aria-label="ABC"> + <path d="m16.161 14.415h-0.74887l-0.10304 0.35121h-0.67195l0.79966-2.1276h0.71694l0.79966 2.1276h-0.68791zm-0.13787-0.46006-0.23511-0.76483-0.23366 0.76483z"/> + <path d="m17.166 12.638h1.2307q0.30768 0 0.47167 0.15239 0.16545 0.15239 0.16545 0.37734 0 0.18867-0.11755 0.32364-0.07837 0.08998-0.2293 0.14223 0.2293 0.05515 0.3367 0.19012 0.10885 0.13352 0.10885 0.3367 0 0.16545-0.07692 0.29752t-0.21044 0.20899q-0.08272 0.04789-0.24962 0.06966-0.22205 0.02903-0.29461 0.02903h-1.1349zm0.66324 0.83449h0.2859q0.15384 0 0.21334-0.05225 0.06095-0.0537 0.06095-0.15384 0-0.09288-0.06095-0.14513-0.0595-0.05225-0.20899-0.05225h-0.29026zm0 0.83594h0.33525q0.1698 0 0.23946-0.0595 0.06966-0.06095 0.06966-0.16254 0-0.09433-0.06966-0.15093-0.06821-0.05805-0.24092-0.05805h-0.3338z"/> + <path d="m20.892 13.897 0.57616 0.17416q-0.05805 0.24237-0.18286 0.40491t-0.31058 0.24527q-0.18432 0.08272-0.47022 0.08272-0.34686 0-0.56746-0.10014-0.21915-0.10159-0.37879-0.35557t-0.15964-0.65018q0-0.52827 0.2801-0.81127 0.28155-0.28445 0.79531-0.28445 0.40201 0 0.63131 0.16254 0.23076 0.16254 0.34251 0.49924l-0.58052 0.12916q-0.03048-0.09724-0.06386-0.14223-0.05515-0.07547-0.13497-0.1161-0.07982-0.04064-0.17851-0.04064-0.2235 0-0.34251 0.17996-0.08998 0.13352-0.08998 0.41942 0 0.35412 0.1074 0.48618 0.1074 0.13062 0.30187 0.13062 0.18867 0 0.28445-0.10594 0.09724-0.10594 0.14078-0.30767z"/> + </g> + <g transform="matrix(-.0023678 0 0 -.0023678 15.557 15.557)" fill="#fff"> + <path d="m380.5 100.5-350 350c-27.3 27.3-27.3 71.6 0 99l350 350c27.3 27.3 71.6 27.3 99 0 27.3-27.3 27.3-71.6 0-99l-230.5-230.5h671c38.7 0 70-31.3 70-70s-31.3-70-70-70h-671l230.5-230.5c13.7-13.7 20.5-31.6 20.5-49.5s-6.8-35.8-20.5-49.5c-27.4-27.3-71.7-27.3-99 0z" fill="#fff"/> + </g> </g> </svg> -- GitLab