From 36efc7c11b8ad2838038b05ee3de669188d3a300 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Fri, 18 Jun 2021 11:54:59 +0200 Subject: [PATCH] Improve title bar --- android/gradle.properties | 4 +- assets/game/difficulty_3x3.png | Bin 2967 -> 0 bytes assets/game/difficulty_4x4.png | Bin 3036 -> 0 bytes assets/game/difficulty_5x5.png | Bin 2811 -> 0 bytes assets/icons/button_back.png | Bin 0 -> 3739 bytes assets/icons/button_shuffle.png | Bin 0 -> 3306 bytes assets/icons/difficulty_3x3.png | Bin 0 -> 6014 bytes assets/icons/difficulty_4x4.png | Bin 0 -> 4069 bytes assets/icons/difficulty_5x5.png | Bin 0 -> 5673 bytes ...ld_icons.sh => build_application_icons.sh} | 1 - icons/build_game_icons.sh | 51 ++++++++++++++++++ icons/button_back.svg | 2 + icons/button_shuffle.svg | 2 + icons/difficulty_3x3.svg | 2 + icons/difficulty_4x4.svg | 2 + icons/difficulty_5x5.svg | 2 + lib/screens/home.dart | 27 ++++++++-- pubspec.yaml | 2 +- 18 files changed, 86 insertions(+), 9 deletions(-) delete mode 100644 assets/game/difficulty_3x3.png delete mode 100644 assets/game/difficulty_4x4.png delete mode 100644 assets/game/difficulty_5x5.png create mode 100644 assets/icons/button_back.png create mode 100644 assets/icons/button_shuffle.png create mode 100644 assets/icons/difficulty_3x3.png create mode 100644 assets/icons/difficulty_4x4.png create mode 100644 assets/icons/difficulty_5x5.png rename icons/{build_icons.sh => build_application_icons.sh} (92%) create mode 100755 icons/build_game_icons.sh create mode 100644 icons/button_back.svg create mode 100644 icons/button_shuffle.svg create mode 100644 icons/difficulty_3x3.svg create mode 100644 icons/difficulty_4x4.svg create mode 100644 icons/difficulty_5x5.svg diff --git a/android/gradle.properties b/android/gradle.properties index 357cef3..f0fcf6c 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.0.25 -app.versionCode=25 +app.versionName=0.0.26 +app.versionCode=26 diff --git a/assets/game/difficulty_3x3.png b/assets/game/difficulty_3x3.png deleted file mode 100644 index 0bde256ef61a433321973f3b714cb13a5a76ae36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2967 zcmb7GXIRpY8vOwx2)Gw0E}SUhLQz3Qb8BvKCk~vc<tod8X=TGvRz|t9X|B}%mT5}M z%vEMtZnB*_w>hr;zuj;5emLhn&w0<s_j%5H%EifsA0dSR0D#}l*3xZva{dAi*<~iU zSbul$9kBID003;wE)qfYD?FXMCMMC!JJCHZEb&lKJQFx{=nye7Haa0B=m3)#7ax9g zmMR4R;8_<(53Aj<#ZHv@PNexxw8c)e`ClFJFYk(|e^-Ca-53A@KwuCE0s`@XK~ON5 z7Yv3$z;Fndj|YO_fgqs}6coY_<q_cJ5#;3&g7FB$pdv7+C>$yVhl=y@O7QVYB6!gV zUJL>zg@j2XVOSJQ1_hTz!R7ej^89cG0Y01npQ0e2vLHf52%##3P!mSrg^}vQNDUDr zK?JEOiXw`lw8T)_VkjLkem!x1l7xW1gn)sBpb=Wo7%fP_2vRXZCKw@8DIqf{A)2(X zxwNo_w6G;s#7aiQT1Lc1R>W3T)J|5^UQX0OPSjCeY_GhSlf0O-f|!efxGPTF4JYo7 z6ZcS*@KltbD@k}MN%|;D`YKEMsYv>(paWFV`&7|^s%VB9CP)nvjK_qkOEJ}@!qlZB z3DQvn>1YCWza}<D6B|p!#t~%>YRSZF$s}mYCThzj>BuJQ$R5&>JFF|0qAPbqPwuFm zd@4ykog|;3ufWn*$TUzmW}uK|fXgQ1j+1dG3~?t76?2RfPZ=qlHCD={DCJR<@+ry% zRONG2<?|*g7fe+ynyM6;sa`fyWz$rz(A2Kd)QZj3O3c+tE%0R)`0_pYYkTk&d(>}O zs^7BGxNW6z$6BM(TH~$_p~{9(Z9}NB)vUAAyl1CbZ?D;4Pi(X&-ghAW<3Mb3)Oz5k z_0UnPd9T)^z1l5K+O1C7kDayKoORlrbvQ0MPh51Ky6Qf2)qU=&`@&7P!%gp{yI!Ze zUY7@{+k@2ON$T~~@1yI#rt80<>-T#Zy!A2|@HTkoZSdZQJm^FI;6wiCOCIty9QHFD z@iQFtGaU0b8uvGv2r%LX7=7AjJh{*K^FHG*fyQ40Dc=~B?+nTh2IXfE^;ZyeDwsMQ zOq~fanGG?S3o)4wHCYHX{mnF8WSTB9O_#&WR>I6y!_C&h&DJAm8xgcW5wy)n+E%3b z_TPKfKb-V#_mcS&-JINky-v=qZtmSZy?yH&=)w1!000-Zvo!ZOJUla!;xEQT!{#+L zYSuIxz$%s%D(Y<d6=m_T(sSpNeX{A6>}K|PW`9t$?}@MM7;>Z)USv4aC)+!UZ4)Gm zFA%}sz*S=#=Q6hHr)Q`8P<^cw$n^I`YQ{|M>>tyK687rhFl~0<l-Sc_Bn#stZMN~f z@;s!YB$QlUh*x?DQc#ijVh(_XSOAYa0D{y07g-(v!mc-)&6-Za)oIKHn}mT_x%8xb z(>c9lB*4Lzk<$84gv`jz$F<GmmCk41yak>_&vPbA`jU|mgf2(YGqQl}i46bJOEVEg zEaf7alr8{VFPTBPv^5mSAdg1@UEbq1s>A$@sVoU@R$<9|NU+pCXoar8eI#w%7T~xT z_?mG0Ps{>BM<$vKU}C64s{gF+U1n|8jn#F;#JO|6og2T=AW+HsyqG<k65}-XA&hl8 zaiQF(c&uDv-qu~KpW@I_X#gU%3eOZ?Y~Ek$%PE>zZ_9rj38B5x-noBi#)B^>nfhtR zwX2@aYdG`PCz{Y=FC!n2Q<yp!9Z&^!a=x%$Pw_InE>Pg5wivVM-bd#NedSa)7fXlc z#P^)v+UTJ35DI!3O>Y8!x6tiCg2*&xd+CTh>-P}mqRpdjCB}N@%oWn_K2p{DjW=KT z?Di0$Jqg~;r2gQcP0?TZgq>^RK>G{OsXYDji@20+x$_z~zr=NX^l03{ko<@{IVC5L zKo(K3O)(^(ciD4voxdq&ujce?y0d7$v7phPZqRhDBEUGoATR>5t6H3+>XKGdd!J^7 zZ(VUQoQhxF3H;OOzrEV{JwR(V0nN9j-rC$At4w(clHWWh=b4wjZ1lMY5b|8DcHCa@ zygFL7a4P&PWIud$UwqzIT7I**Z(G~yPj8M2dF*&h?NTWdpKA?5;4IV9pCA^a^ozXX zkspa{h<2c@#AAmT67ReN`C!@Aheh1Cn=cL4`_9t$05>PEJ#Q#DDy~MIF3Z@zK1ggU z3&jA2Y<XESWY{Kc=rwulpB?`BGLF|zfe5L&n6~Z;YYCU)d#6<&sQTPZ^c|@nGioC` zN1lT7av>(Y{7KapnyZh>y_dW<?zhz3VxRBUQ;9ECeqLG|ujl7hSju|q?fmTZl!r$G zQ6NE60n67AO=-OY;~adD@>HSYaySyb(v*I)Gp+)3<KD}!izids1psMQ1SMov-PW?L z^u@bCSg_;rZI{!znUF4j>4|rDA+^xZHQu!71%A(I?oIpkiD@{ND?2{fZpIeiH01r1 z9k}RJt~#~yIKhy{SuOo$p*Q8Fit???*q*hzpRv@FP@7}vpTuCfR!G!Myg;3jYL1uf zkTXdZ1bPJE^EGp$58p-RaPK5$gw^v+G_P!3GJ}B5E<}^p?<gFb&{~`dpV!JYSZy`J z100o~y)~LA;0VRkspQ+Mr|w>QvB_F^>%OQGQk&&jL3~sfG&GrJqf0J-PJoVvp;##z zNp@dV2U7nKCZRnSzD>*sW&z8+4^jwq$QNE4fhol-_kK4{c+Z`W(tLoI1exih^f>l2 zq`Cl~ru#V<!>ZJ0hJ=30u1p19%^*iVGUQn`w%sAoU({>ibzBg(psDc;Mta$P>Q@St z<)ze1AQ@(?RJ?7tA14Z9<YZ`MNhf2;5(Rf3>a5vQ82L+sq^i`^_{?)GL2-~^1k5%z zSXr;bJH0)+Xb{aC@yMD_$h8K;Egl(okXtskT&y<bbe(7D^hqu<FUUi!OX#9VTvEnn zQigp0z7Jg|%P+?nX^JtIB4eMlNY?hEphuY7%%ut^v8?gWW9K||t{tEU0?(cwW%p)* zvh%tl-^slBXme#tXe3z$`yKo)&tfhgBYOIqcX#R;D|QK}JT9zx{8*9FP|-cT^?_g= zb1u*d<=_IXM-LWObyAvX6ER_xKd#liu^dUKx2W`bCgZ;Vjv$u(@ncT(#ok-yKAuMq zDi6zi(alTns$PeD<B|9ZWttg4R^OhQy*ieaxKXzO8U)eSO6KIk-wzdPxz=Bd0v$jD z`!)R!I+(~P4M#7FP}8is?ut$yUI|Elupc+251~V7XUt|ZmFDz92Pcv!2xfOjCv|77 zFpSd(O!~E1m#nD8;azSYOv*U#ldS7qi8%mcz3dwtQ#kk&M{M+H@BU~O7Qwp&o9`Q< z^qdkm`<>{;`TR=>%8969N$Ign)Q?o#F8uuQtD4iqU#A8H-v>8=b6i)y*yhc3=~K&N zo*lUf4Y+8{`3`hcPTwE?^}(lNi=@SsQ|1WdvXp_ayJf7+qM#zpZ;#QF;y{WNC;=e2 zPt0TtJii|3h@J<la%G_$L@o>FH}2^0+0S|Jy;ZWs7&wvm3DV;Vv{nlj@Nmm-l}3jd zNG_W(&(@0(xRBNwpp$#2CvwZ72=}3M-nj#Plz(6ikQN8>qj>ybiSI{K#u9>N73a~V zpCDK|Fj^(7E%f7M|5g(ZgN6?&%g#(N5W;;0iRyzVS=Xpr<esTxox%_nzE#is5tSQ| z%i7;!QlynRb{((`9Zc}@8XRU;<lI(&B7HO-=~O?+w-HVM|BCXzN;L{lcv7<S;ubPX u`pv7v*aMJ0GTS&2HQe}PGVlB4ZP<k$7gj%vi)Q|PfbFcDENd+o$NmFpz0(N* diff --git a/assets/game/difficulty_4x4.png b/assets/game/difficulty_4x4.png deleted file mode 100644 index 67364276383e39456f05791a88fabd3001513b4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3036 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 GH}by-L<T_s diff --git a/assets/game/difficulty_5x5.png b/assets/game/difficulty_5x5.png deleted file mode 100644 index 087591fa02fcb21b57b47ebddaeb35b01261b05d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2811 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 diff --git a/assets/icons/button_back.png b/assets/icons/button_back.png new file mode 100644 index 0000000000000000000000000000000000000000..370c0893bebe5c38c698f1c04c58a341efcb0707 GIT binary patch literal 3739 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 Ee;uytbN~PV literal 0 HcmV?d00001 diff --git a/assets/icons/button_shuffle.png b/assets/icons/button_shuffle.png new file mode 100644 index 0000000000000000000000000000000000000000..6d2d89f0df0a4d884882d3b90eb6dc7177da5f07 GIT binary patch literal 3306 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 literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_3x3.png b/assets/icons/difficulty_3x3.png new file mode 100644 index 0000000000000000000000000000000000000000..1b8fd3f1e5e9309e8b2b0d2b47ed14546819e8b7 GIT binary patch literal 6014 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	=Uuj)k4hMaKiq62 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 literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_4x4.png b/assets/icons/difficulty_4x4.png new file mode 100644 index 0000000000000000000000000000000000000000..ea494327f7c558f7447001c20b777eb4d87bde71 GIT binary patch literal 4069 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 literal 0 HcmV?d00001 diff --git a/assets/icons/difficulty_5x5.png b/assets/icons/difficulty_5x5.png new file mode 100644 index 0000000000000000000000000000000000000000..f4bde9c16fabb1379254d84c2c01f9446a43cc2b GIT binary patch literal 5673 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 literal 0 HcmV?d00001 diff --git a/icons/build_icons.sh b/icons/build_application_icons.sh similarity index 92% rename from icons/build_icons.sh rename to icons/build_application_icons.sh index fefc393..336359e 100755 --- a/icons/build_icons.sh +++ b/icons/build_application_icons.sh @@ -4,7 +4,6 @@ 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 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)" BASE_DIR="$(dirname "${CURRENT_DIR}")" diff --git a/icons/build_game_icons.sh b/icons/build_game_icons.sh new file mode 100755 index 0000000..17d6d79 --- /dev/null +++ b/icons/build_game_icons.sh @@ -0,0 +1,51 @@ +#! /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; } + +CURRENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +BASE_DIR="$(dirname "${CURRENT_DIR}")" + +OPTIPNG_OPTIONS="-preserve -quiet -o7" + +# optimize svg +function optimize_svg() { + SOURCE="$1" + + cp ${SOURCE} ${SOURCE}.tmp + scour \ + --remove-descriptive-elements \ + --enable-id-stripping \ + --enable-viewboxing \ + --enable-comment-stripping \ + --nindent=4 \ + -i ${SOURCE}.tmp \ + -o ${SOURCE} + rm ${SOURCE}.tmp +} + +# build icons +function build_icon() { + ICON_SIZE=192 + SOURCE="$1" + TARGET="$2" + + optimize_svg "${SOURCE}" + + inkscape \ + --export-width=${ICON_SIZE} \ + --export-height=${ICON_SIZE} \ + --export-filename=${TARGET} \ + ${SOURCE} + + optipng ${OPTIPNG_OPTIONS} ${TARGET} +} + +# Game icons +build_icon ${CURRENT_DIR}/button_back.svg ${BASE_DIR}/assets/icons/button_back.png +build_icon ${CURRENT_DIR}/button_shuffle.svg ${BASE_DIR}/assets/icons/button_shuffle.png +build_icon ${CURRENT_DIR}/difficulty_3x3.svg ${BASE_DIR}/assets/icons/difficulty_3x3.png +build_icon ${CURRENT_DIR}/difficulty_4x4.svg ${BASE_DIR}/assets/icons/difficulty_4x4.png +build_icon ${CURRENT_DIR}/difficulty_5x5.svg ${BASE_DIR}/assets/icons/difficulty_5x5.png diff --git a/icons/button_back.svg b/icons/button_back.svg new file mode 100644 index 0000000..0d152c5 --- /dev/null +++ b/icons/button_back.svg @@ -0,0 +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"><path d="m46.834 11.248c-19.624 0-35.588 15.964-35.588 35.592 0 19.624 15.964 35.588 35.588 35.588s35.584-15.964 35.584-35.588c0-19.629-15.96-35.592-35.584-35.592zm0 63.607c-15.471 0-28.02-12.544-28.02-28.014 0-15.477 12.549-28.019 28.02-28.019s28.018 12.541 28.018 28.019c0 15.471-12.547 28.014-28.018 28.014z" stroke-width=".75985"/><path d="m55.403 64.285c0.85468 0.85879 3.0403 0.85879 3.0403 0v-34.893c0-0.85985-2.1908-0.85985-3.0486 0l-28.641 15.895c-0.8578 0.85468-0.87224 2.2454-0.0165 3.1032z" fill="#ed9138" stroke-width="1.031"/></svg> diff --git a/icons/button_shuffle.svg b/icons/button_shuffle.svg new file mode 100644 index 0000000..1f46eaa --- /dev/null +++ b/icons/button_shuffle.svg @@ -0,0 +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"><path d="m83.437 0.38264h-73.092c-5.6481 0-9.9672 4.3191-9.9672 9.9672v73.092c0 5.6481 4.3191 9.9672 9.9672 9.9672h73.092c5.6481 0 9.9672-4.3191 9.9672-9.9672v-73.092c0-5.6481-4.3191-9.9672-9.9672-9.9672zm-19.602 31.23-12.625 15.283 12.957 15.283c0.66448 0.66448 1.6612 1.329 2.6579 1.329v-3.3224c0-1.9934 1.329-3.3224 3.3224-3.3224 0.99672 0 1.6612 0.33224 2.3257 0.99672l6.977 6.3125c1.6612 1.6612 1.6612 2.3257 0 4.3191l-7.3092 7.3092c-1.329 1.329-3.3224 0.99672-4.6513-0.33224-0.33224-0.66448-0.66448-1.329-0.66448-1.9934v-3.3224h-0.33224c-2.9901 0-5.6481-1.329-7.6415-3.6546l-11.961-14.286-11.961 14.618c-1.9934 1.9934-4.6513 3.3224-7.6415 3.3224h-10.299c-1.9934 0-3.3224-1.329-3.3224-3.3224s1.329-3.3224 3.3224-3.3224h10.299c0.99672 0 1.9934-0.33224 2.6579-1.329l12.957-15.283-12.957-15.283c-0.66448-0.66448-1.6612-1.329-2.6579-1.329h-10.299c-1.9934 0-3.3224-1.329-3.3224-3.3224s1.329-3.3224 3.3224-3.3224h10.299c2.9901 0 5.6481 1.329 7.6415 3.6546l11.961 14.618 11.961-14.618c1.9934-2.3257 4.6513-3.6546 7.6415-3.6546h0.33224v-3.3224c0-1.9934 1.329-3.3224 3.3224-3.3224 0.99672 0 1.6612 0.33224 2.3257 0.99672l6.6448 6.6448c1.6612 1.6612 1.9934 2.9901 0.33224 4.9836l-6.6448 6.6448c-1.329 1.329-2.9901 1.9934-4.6513 0.66448-0.99672-0.66448-1.329-1.6612-1.329-3.6546v-2.9901s-1.9934 0-2.9901 1.329z" fill="#7a0d86" stroke-width="3.3224"/></svg> diff --git a/icons/difficulty_3x3.svg b/icons/difficulty_3x3.svg new file mode 100644 index 0000000..93e4dda --- /dev/null +++ b/icons/difficulty_3x3.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="#009d21"/><g fill="#f9f9f9" stroke="#000" stroke-width="2" aria-label="3x3"><path d="m19.443 43.965-7.5195-1.3477q0.9375-3.5938 3.5938-5.5078 2.6758-1.9141 7.5586-1.9141 5.6055 0 8.1055 2.0898t2.5 5.2539q0 1.8555-1.0156 3.3594t-3.0664 2.6367q1.6602 0.41016 2.5391 0.95703 1.4258 0.87891 2.207 2.3242 0.80078 1.4258 0.80078 3.418 0 2.5-1.3086 4.8047-1.3086 2.2852-3.7695 3.5352-2.4609 1.2305-6.4648 1.2305-3.9062 0-6.1719-0.91797-2.2461-0.91797-3.7109-2.6758-1.4453-1.7773-2.2266-4.4531l7.9492-1.0547q0.46875 2.4023 1.4453 3.3398 0.99609 0.91797 2.5195 0.91797 1.6016 0 2.6562-1.1719 1.0742-1.1719 1.0742-3.125 0-1.9922-1.0352-3.0859-1.0156-1.0938-2.7734-1.0938-0.9375 0-2.5781 0.46875l0.41016-5.6836q0.66406 0.09766 1.0352 0.09766 1.5625 0 2.5977-0.99609 1.0547-0.99609 1.0547-2.3633 0-1.3086-0.78125-2.0898t-2.1484-0.78125q-1.4062 0-2.2852 0.85938-0.87891 0.83984-1.1914 2.9688z"/><path d="m37.373 43.574h9.4336l3.3008 5.7812 3.8281-5.7812h8.7695l-7.0703 9.8828 7.5781 10.859h-9.2773l-3.8281-6.6797-4.5117 6.6797h-8.6133l7.5391-10.859z"/><path d="m72.803 43.965-7.5195-1.3477q0.9375-3.5938 3.5938-5.5078 2.6758-1.9141 7.5586-1.9141 5.6055 0 8.1055 2.0898t2.5 5.2539q0 1.8555-1.0156 3.3594t-3.0664 2.6367q1.6602 0.41016 2.5391 0.95703 1.4258 0.87891 2.207 2.3242 0.80078 1.4258 0.80078 3.418 0 2.5-1.3086 4.8047-1.3086 2.2852-3.7695 3.5352-2.4609 1.2305-6.4648 1.2305-3.9062 0-6.1719-0.91797-2.2461-0.91797-3.7109-2.6758-1.4453-1.7773-2.2266-4.4531l7.9492-1.0547q0.46875 2.4023 1.4453 3.3398 0.99609 0.91797 2.5195 0.91797 1.6016 0 2.6562-1.1719 1.0742-1.1719 1.0742-3.125 0-1.9922-1.0352-3.0859-1.0156-1.0938-2.7734-1.0938-0.9375 0-2.5781 0.46875l0.41016-5.6836q0.66406 0.09766 1.0352 0.09766 1.5625 0 2.5977-0.99609 1.0547-0.99609 1.0547-2.3633 0-1.3086-0.78125-2.0898t-2.1484-0.78125q-1.4062 0-2.2852 0.85938-0.87891 0.83984-1.1914 2.9688z"/></g></svg> diff --git a/icons/difficulty_4x4.svg b/icons/difficulty_4x4.svg new file mode 100644 index 0000000..d7e5113 --- /dev/null +++ b/icons/difficulty_4x4.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="#eeb517"/><g fill="#fff" stroke="#000" stroke-width="2" aria-label="4x4"><path d="m25.303 59.209h-14.492v-6.543l14.492-17.227h6.9336v17.598h3.5938v6.1719h-3.5938v5.3516h-6.9336zm0-6.1719v-9.0039l-7.6562 9.0039z"/><path d="m37.275 43.818h9.4336l3.3008 5.7812 3.8281-5.7812h8.7695l-7.0703 9.8828 7.5781 10.859h-9.2773l-3.8281-6.6797-4.5117 6.6797h-8.6133l7.5391-10.859z"/><path d="m78.662 59.209h-14.492v-6.543l14.492-17.227h6.9336v17.598h3.5938v6.1719h-3.5938v5.3516h-6.9336zm0-6.1719v-9.0039l-7.6562 9.0039z"/></g></svg> diff --git a/icons/difficulty_5x5.svg b/icons/difficulty_5x5.svg new file mode 100644 index 0000000..ee803c9 --- /dev/null +++ b/icons/difficulty_5x5.svg @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="UTF-8"?> +<svg enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg"><rect width="100" height="100" ry="2" fill="#d31158"/><g fill="#fff" stroke="#000" stroke-width="2" aria-label="5x5"><path d="m14.971 35.439h18.887v6.3477h-12.793l-0.68359 4.2969q1.3281-0.625 2.6172-0.9375 1.3086-0.3125 2.5781-0.3125 4.2969 0 6.9727 2.5977t2.6758 6.543q0 2.7734-1.3867 5.332-1.3672 2.5586-3.9062 3.9062-2.5195 1.3477-6.4648 1.3477-2.832 0-4.8633-0.52734-2.0117-0.54688-3.4375-1.6016-1.4062-1.0742-2.2852-2.4219-0.87891-1.3477-1.4648-3.3594l8.0469-0.87891q0.29297 1.9336 1.3672 2.9492 1.0742 0.99609 2.5586 0.99609 1.6602 0 2.7344-1.25 1.0938-1.2695 1.0938-3.7695 0-2.5586-1.0938-3.75t-2.9102-1.1914q-1.1523 0-2.2266 0.56641-0.80078 0.41016-1.7578 1.4844l-6.7773-0.97656z"/><path d="m37.393 43.33h9.4336l3.3008 5.7812 3.8281-5.7812h8.7695l-7.0703 9.8828 7.5781 10.859h-9.2773l-3.8281-6.6797-4.5117 6.6797h-8.6133l7.5391-10.859z"/><path d="m68.33 35.439h18.887v6.3477h-12.793l-0.68359 4.2969q1.3281-0.625 2.6172-0.9375 1.3086-0.3125 2.5781-0.3125 4.2969 0 6.9727 2.5977t2.6758 6.543q0 2.7734-1.3867 5.332-1.3672 2.5586-3.9062 3.9062-2.5195 1.3477-6.4648 1.3477-2.832 0-4.8633-0.52734-2.0117-0.54688-3.4375-1.6016-1.4062-1.0742-2.2852-2.4219-0.87891-1.3477-1.4648-3.3594l8.0469-0.87891q0.29297 1.9336 1.3672 2.9492 1.0742 0.99609 2.5586 0.99609 1.6602 0 2.7344-1.25 1.0938-1.2695 1.0938-3.7695 0-2.5586-1.0938-3.75t-2.9102-1.1914q-1.1523 0-2.2266 0.56641-0.80078 0.41016-1.7578 1.4844l-6.7773-0.97656z"/></g></svg> diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 94f996f..1db426d 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -13,6 +13,7 @@ import '../utils/get_images_list.dart'; class Home extends StatelessWidget { static const String id = 'home'; + Color themePrimaryColor = Colors.blue; double _tipImageSize = 100; int _selectImageColumnsCount = 2; @@ -109,9 +110,9 @@ class Home extends StatelessWidget { } FlatButton _buildTilesetSizeSelectorItem(Data myProvider, int value) { - String assetName = 'assets/game/difficulty_' + value.toString() + 'x' + value.toString() + '.png'; + String assetName = 'assets/icons/difficulty_' + value.toString() + 'x' + value.toString() + '.png'; - Color borderColor = Colors.blue; + Color borderColor = themePrimaryColor; if (myProvider.tilesCount == value) { borderColor = Colors.white; @@ -335,21 +336,37 @@ class Home extends StatelessWidget { _buildTilesetSizeSelectorItem(_myProvider, 4), _buildTilesetSizeSelectorItem(_myProvider, 5), FlatButton( - child: Text('🎲'), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: themePrimaryColor, + width: 4, + ), + ), + margin: EdgeInsets.all(8), + child: Image( + image: AssetImage('assets/icons/button_shuffle.png'), + fit: BoxFit.fill + ), + ), onPressed: () => shuffleImages(_myProvider), ), ]; List<Widget> gameActions = [ FlatButton( - child: Text('â—€ï¸'), + child: Image( + image: AssetImage('assets/icons/button_back.png'), + fit: BoxFit.fill + ), onPressed: () => resetGame(_myProvider), ), ]; return Scaffold( appBar: AppBar( - title: Text('🧩'), + backgroundColor: themePrimaryColor, actions: _myProvider.image == '' ? menuActions : gameActions, ), body: SafeArea( diff --git a/pubspec.yaml b/pubspec.yaml index 7805c97..bb894db 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -20,6 +20,6 @@ flutter: uses-material-design: true assets: - assets/files/ - - assets/game/ + - assets/icons/ - assets/images/ - assets/ui/ -- GitLab