From 912574b5f946ef8b0089288ff29fc515c6ce5e22 Mon Sep 17 00:00:00 2001 From: Jens Arnold Date: Fri, 29 Sep 2006 20:39:29 +0000 Subject: [PATCH] Heavy graphical rework of solitaire: * Now uses full-card bitmaps (minus border) in several resolutions and colour depths. All graphical work done by Marianne Arnold; 37x49 and 26x33 pixel graphics partially based on the PySol cardset adapted from kdegames 1.0 * Cardback for greyscale targets. * Nicer edges for large cards. * Correct vertical card spacing within columns, hidden cards always use half the space now. * Correct horizontal spacing of columns. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11096 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/bitmaps/mono/SOURCES | 16 -- .../bitmaps/mono/solitaire_numbers.6x6x1.bmp | Bin 374 -> 0 bytes .../bitmaps/mono/solitaire_numbers.8x10x1.bmp | Bin 582 -> 0 bytes .../bitmaps/mono/solitaire_suits.6x6x1.bmp | Bin 158 -> 0 bytes .../bitmaps/mono/solitaire_suits.8x10x1.bmp | Bin 222 -> 0 bytes .../mono/solitaire_suits.8x10x1_filled.bmp | Bin 222 -> 0 bytes .../bitmaps/mono/solitaire_suitsi.15x16x1.bmp | Bin 318 -> 0 bytes .../mono/solitaire_suitsi.15x16x1_filled.bmp | Bin 318 -> 0 bytes .../bitmaps/mono/solitaire_suitsi.9x9x1.bmp | Bin 206 -> 0 bytes apps/plugins/bitmaps/native/SOURCES | 36 ++- .../native/solitaire_cardback.13x13x1.bmp | Bin 0 -> 114 bytes .../native/solitaire_cardback.15x20x16.bmp | Bin 0 -> 1014 bytes .../native/solitaire_cardback.15x20x2.bmp | Bin 0 -> 392 bytes .../native/solitaire_cardback.176x132x16.bmp | Bin 1398 -> 0 bytes .../native/solitaire_cardback.18x23x16.bmp | Bin 0 -> 1342 bytes .../native/solitaire_cardback.18x23x2.bmp | Bin 0 -> 532 bytes ...16.bmp => solitaire_cardback.26x33x16.bmp} | Bin 2694 -> 2694 bytes .../native/solitaire_cardback.37x49x16.bmp | Bin 0 -> 5542 bytes .../native/solitaire_deck.169x52x1.bmp | Bin 0 -> 1310 bytes .../native/solitaire_deck.195x80x16.bmp | Bin 0 -> 47094 bytes .../native/solitaire_deck.195x80x2.bmp | Bin 0 -> 15752 bytes .../native/solitaire_deck.234x92x16.bmp | Bin 0 -> 64822 bytes .../native/solitaire_deck.234x92x2.bmp | Bin 0 -> 21784 bytes .../native/solitaire_deck.338x132x16.bmp | Bin 0 -> 134166 bytes .../native/solitaire_deck.481x196x16.bmp | Bin 0 -> 283078 bytes .../native/solitaire_suitsi.13x52x1.bmp | Bin 0 -> 270 bytes .../native/solitaire_suitsi.15x80x16.bmp | Bin 0 -> 3894 bytes .../native/solitaire_suitsi.15x80x2.bmp | Bin 0 -> 1350 bytes .../native/solitaire_suitsi.18x92x16.bmp | Bin 0 -> 5206 bytes .../native/solitaire_suitsi.18x92x2.bmp | Bin 0 -> 1914 bytes .../native/solitaire_suitsi.26x132x16.bmp | Bin 0 -> 10614 bytes .../native/solitaire_suitsi.37x196x16.bmp | Bin 0 -> 22006 bytes apps/plugins/solitaire.c | 260 +++++++----------- 33 files changed, 137 insertions(+), 175 deletions(-) delete mode 100644 apps/plugins/bitmaps/mono/solitaire_numbers.6x6x1.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_numbers.8x10x1.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_suits.6x6x1.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_suits.8x10x1.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_suits.8x10x1_filled.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1.bmp delete mode 100644 apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1_filled.bmp delete mode 100755 apps/plugins/bitmaps/mono/solitaire_suitsi.9x9x1.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.13x13x1.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.15x20x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.15x20x2.bmp delete mode 100644 apps/plugins/bitmaps/native/solitaire_cardback.176x132x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.18x23x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.18x23x2.bmp rename apps/plugins/bitmaps/native/{solitaire_cardback.220x176x16.bmp => solitaire_cardback.26x33x16.bmp} (97%) mode change 100644 => 100755 create mode 100755 apps/plugins/bitmaps/native/solitaire_cardback.37x49x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.169x52x1.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.195x80x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.195x80x2.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.234x92x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.234x92x2.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.338x132x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_deck.481x196x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.13x52x1.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.15x80x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.15x80x2.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.18x92x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.18x92x2.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.26x132x16.bmp create mode 100755 apps/plugins/bitmaps/native/solitaire_suitsi.37x196x16.bmp diff --git a/apps/plugins/bitmaps/mono/SOURCES b/apps/plugins/bitmaps/mono/SOURCES index e6ccebb9ce..9dfc312348 100644 --- a/apps/plugins/bitmaps/mono/SOURCES +++ b/apps/plugins/bitmaps/mono/SOURCES @@ -32,20 +32,4 @@ brickmania_powerups.112x64x1.bmp rockblox_background.112x64x1.bmp #endif -/* Solitaire */ -#if LCD_HEIGHT > 64 -solitaire_numbers.8x10x1.bmp -#if HAVE_LCD_COLOR -solitaire_suits.8x10x1_filled.bmp -solitaire_suitsi.15x16x1_filled.bmp -#else -solitaire_suits.8x10x1.bmp -solitaire_suitsi.15x16x1.bmp -#endif -#else -solitaire_numbers.6x6x1.bmp -solitaire_suits.6x6x1.bmp -solitaire_suitsi.9x9x1.bmp -#endif - #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/plugins/bitmaps/mono/solitaire_numbers.6x6x1.bmp b/apps/plugins/bitmaps/mono/solitaire_numbers.6x6x1.bmp deleted file mode 100644 index 67884fe7411238244b319cebe743e684ca97cc34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 374 zcmYk0u?@mN5Cq={AtFQxA37v-fRKdLWBq?!bMRJH82BSQt1T9ZA?^E}I0&l6MX5JsuGR?{PI*g+pcQ+Mrt z`1bVX%wP?#ggy!1gZ>8h#ELqB1E_^BW;%ZhX8fBQKDA=6-*x0I>E#4h@c+!#C*dn+ z4ADGS&I?~;6n(|KxCd*@n$ZX4xf`?#oWZ_4H!{3$eNUMG@h#YsG4v8g>J~ib+z&r0 BWS9T| diff --git a/apps/plugins/bitmaps/mono/solitaire_suits.6x6x1.bmp b/apps/plugins/bitmaps/mono/solitaire_suits.6x6x1.bmp deleted file mode 100644 index 67ec92e113dde4063e3f5b98fe64bddb6bc29ce1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 158 zcmZ?royPzHc0fu4h}nQx0*D!b5Cjr{_y`{aGXdEk3qW?E}g$0^$xJz6-=Kb=b@UnTu>50L9EE0RR91 diff --git a/apps/plugins/bitmaps/mono/solitaire_suits.8x10x1_filled.bmp b/apps/plugins/bitmaps/mono/solitaire_suits.8x10x1_filled.bmp deleted file mode 100644 index 497dcae149825f8add5babb82460b9601a8fc37f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 222 zcmZ?ry~h9nc0fu4h&iA%BLgE?VgZm8;)Y-*ARB~1;Q#;s4F7@jcOZTY#0P=60g6Fv tkQhh~qy~haL-A4|-3Y}XvBOYtm^y6cH2~Fg0P$TQhN;759>`o|^8kLtB{cv5 diff --git a/apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1.bmp b/apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1.bmp deleted file mode 100644 index a47fe1837cb46c750e455c55de1efc5e5d9b9322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmZ?rwPR!e13Mt80mS@3>;S}!KnMmvN{AbRnIIxy^8f$;4FCTzF#Ln!KXnWYKY)gO zlw)9c+{eIh{1^m-*dQ^G97qjJJxDJIgTz4ih#Lb#1JD9w3=#wB`yhwFFmqt~Vdi18 zzyA>f!~9PS40DPY7&?>~7!I;Q-1hw*#BOB!pZGB_901BA+Ye%c#2)ZL?1$M6vJ<2i E08Wxx5C8xG diff --git a/apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1_filled.bmp b/apps/plugins/bitmaps/mono/solitaire_suitsi.15x16x1_filled.bmp deleted file mode 100644 index 272fde560466684c79ba6a17141468990734c84e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 318 zcmZ?rwPR!e13Mt80mS@3>;S}!KnMmvN{AbRnIIxy^8f$;4FCTzF#Ln!KXnWYKY)gO zkYiwYz{kLFfDM8{Y>*g84x|RA9;6q9L1G|$#EpTW0cZg-28qGU1et+s4opAHJZ$zO jn+0MY1iI;Q9|Obpdl0*k?SJA2aWA?akUy~b0i+iIkY-bT diff --git a/apps/plugins/bitmaps/mono/solitaire_suitsi.9x9x1.bmp b/apps/plugins/bitmaps/mono/solitaire_suitsi.9x9x1.bmp deleted file mode 100755 index c08e7f9c11a5a35f45376ebff82e9af71b07511f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmZ?rJ;wk6c0fu4h&h2+1&A4e5CkRwu@E-|Gl4}Q#Q*>Q8U8mgFnkB%$3T1%i043Q v5FaECk_TZJe+rP@0K_moAaR%)m>A5QZBVr!K1>bF9FQ3xd=Q9XVjwjD#|1U? diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index ad1de51eee..c5729a09b7 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -157,10 +157,38 @@ star_tiles.10x10.grey.bmp /* Solitaire */ #ifdef HAVE_LCD_COLOR -#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) -solitaire_cardback.220x176x16.bmp -#else -solitaire_cardback.176x132x16.bmp +#if LCD_WIDTH >= 320 +solitaire_cardback.37x49x16.bmp +solitaire_deck.481x196x16.bmp +solitaire_suitsi.37x196x16.bmp +#elif LCD_WIDTH >= 220 +solitaire_cardback.26x33x16.bmp +solitaire_deck.338x132x16.bmp +solitaire_suitsi.26x132x16.bmp +#elif LCD_WIDTH >= 160 +solitaire_cardback.18x23x16.bmp +solitaire_deck.234x92x16.bmp +solitaire_suitsi.18x92x16.bmp +#elif LCD_WIDTH >= 128 +solitaire_cardback.15x20x16.bmp +solitaire_deck.195x80x16.bmp +solitaire_suitsi.15x80x16.bmp +#endif +#elif LCD_DEPTH > 1 /* greyscale */ +#if LCD_WIDTH >= 160 +solitaire_cardback.18x23x2.bmp +solitaire_deck.234x92x2.bmp +solitaire_suitsi.18x92x2.bmp +#elif LCD_WIDTH >= 128 +solitaire_cardback.15x20x2.bmp +solitaire_deck.195x80x2.bmp +solitaire_suitsi.15x80x2.bmp +#endif +#else /* monochrome */ +#if LCD_WIDTH >= 112 +solitaire_cardback.13x13x1.bmp +solitaire_deck.169x52x1.bmp +solitaire_suitsi.13x52x1.bmp #endif #endif diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.13x13x1.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.13x13x1.bmp new file mode 100755 index 0000000000000000000000000000000000000000..b06511538f386d9d13e6bbb07d7fbf7ed9080262 GIT binary patch literal 114 tcmZ?rEnK3;-!+9((`* literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.15x20x16.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.15x20x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..d18894270b050e30cf068971cc7512e8691f29b4 GIT binary patch literal 1014 zcmajeTTD`M90zb)k3F=tZZEy`)Mi_?wpOjn(%MQfne&)M7b?V%Bt%dF|KZ_)Tn-nJ z0}=<0auGOi#raGt+!u3vYut1R$h)9 z)QnM^gxjZabb$=Sb<(6+#RSZG94!W2MclUhaE6uZJ_XDDS89?SEpAcWh(?^j;QWwf z5=X}dG$Bn(+N`BuIc4tRe8!|CBuz0On;*87DIB}W&pM3vB+aE@e;xyiQNQb2&6E>x zex$YW2_4NMDtE&%Un{gcNfR;w+1;7~x19oBDU8wJPD~->JcIW71ZP+?2HMAv?ns9S zRBlHO?TP?dtXEl1;eKIV(QV-T^nkA5HH|7nMZZ1kf{jOaBYStiM|OMoXU8odtyjf6 zg_D-MoX=U+ql!zkUHgDb&IbOQC`K<4J`m@7E^eO(bZ2#gJpV z_COnyHfa{4IOpd=?%W{!m?mc2M)>glQV?C4iheAmhc4G9R5zEX@C0Uv-nq>AB|0); zSEn7iMJk-KsC*68h7)_OHHYzQysTcH)T)v|@;Dvh{G+fpB!O^IeR(2Y@bt5r^fp$z zq3S8CCS%j(9l9YARP>>opBhAHy=-p8G3&Dvooy3N*j#fkc)N+#cT;^marsq3Da@dK zoS(+@xR{S!hZf^_R3^a1Pzq5o14ahvib$J_0o&lka~Ye4^Es==e*OqMN&s1^zdHsL z1;5KHzCfcrm;}l@`?5wQsg`p7-SV@XOcUoidfyQky@Lkz>GwY5$YYC%x^TVjge3SLH+b zQWm@G9r0Yu$eSoR#<1SIwbopa79rN8RYfU03YDEz3aY@pC#-Mqz|6o?>21sf0@KJo x*1p91DWEX*kktR?u{rDOwO{T#=JEQw$1jaD=RRoq3jyc<=BapSKP!)beF4ro348zm literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.176x132x16.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.176x132x16.bmp deleted file mode 100644 index a3377149b58d6440b0e27679fccaac71dfcbd366..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1398 zcmX9;TT@zB6h7@t|3IJm6Z+JdzI6J~nKaEqnzk`EZQ`YlnrMiMH&71`7 z4H>^A@i~bvNPJR^0PsC|f9KO{kjKTfw6%ibxnMdSCWruzhww~%eNiu<@k~``b1_$7}tV9c?5S%9r$`Yg2Ly zw;_1+A(}7p<-_~i4l&)zZFBW^K+Hy`lz$nD z(C#)`th*?LciuTgG??4!8{&BsVxL+xUVhV9TWV-6o2vNPDeQ)Y?3a^Lh|y?cQ;&AH zuK6ws=+1iw>*;ezrK6wCEuwY{A8rmEbB)sJkTv+*clCnJDcG` z;Yyc6^kB=xs)wcQH*Vv+tb3&7)=cg13lgSJ%5nA3CMrsyUiyk&R?MUIO zzv4U1tfxDE`@FbwsKq(eaPI?htxG<-zv=9y zI=D^RvRlgEZ@yHE7Zh}eUTNy6wu787HLLLWpIXt9g1O-}ZP<-wPP;?I^g9g}Uf1!#bsc)1iy#4)m) z13km{ZoicC|AsX??wR$OQGG|FS1NdIH`}CKixfm7!PJ#skn?OX9DY8`aw+>EQO_%< z$tnY(rpnQKH%1@chPiDXDfs?{ZMM79C7`)Rdod)O$dSG#`GUx?Q$+VDdRHK=Pc8RI zSaXyLQ%mhUk7j78TYDyVhy~AuOt`mgzKlw}7NtspD?Usw2 zGT|)v#G@2UQmd9#1IwyDBl!3PLn2qY1j(_JiIII+J1Gthb*{e?7I%A}DPBy=y-MkG z^&l+gTNQkplLi)|=Mu@0{Vi^;Ai2zOA#-?!@1NpFr}*I+5jrCRXT<&)LFNZn34U~* R4V-5W3mGJj``)bp!2h0kX`BE6 diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.18x23x16.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.18x23x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..7745ead6d8f92aafcb20d878f863d7ce2959a83c GIT binary patch literal 1342 zcma)+PiP`n9LMdUQ0Q$hEwuDj=w&z1mZa&H7MjW$*qSI}Jg69k9Mtg-4hlvwf*CVp zLSS%)hzyxgMh`L$Iw3|08ipjWad8tOx+buLWEWDl9b8Hh=GYhA+&jGAkN1A>^JU)q z{eHaP|NQk+&FGs1{ySigfPDe%6U~>vYc!vM{YRgVZ4>~mc*qZwp{ywKa3~LfR|caY z5C4^ix8um0`v}+_52bf~tF-?>9r*J)k^?h-P~w2S2s$xe^$Z5dHaw)M~ z#S>fv2Jm01s?jKS!(OY#xs3(bwzKM^p}A5VF0Tb?m*s%nVgn8-hp`?*olKN5gmKLS z`29y+zb)}ef5xsapni$LC5|j7eQC%f}BF93L~Q-@~v3=!AD#ekiI%>W+fMICmUH6F2-q7dh`AC)pJY){Yqf
    oOz5toyg2-t9Z16 z#|i<6hphm9`!O%)&1%+fsSx3#!WI{T(5Y`3>ueoIYMap}5z82#k>=TQGEz&S?2-w< z5C1!BRtpH!=C@ebwC$SbJ(dQAR^s5;&@sDylB05N8v`4~bwr4|0DS#WKdD(p9F^t8 z%={EO`OWSc(xjF-cz!qG7NZa-OWtYN&^^gowK>?@lbR28?;P&)VW@^7loaoS<7tOgHCG#B##_@Dc8%6E!<{;GThN?Xvn$~ za|;PSfd3xpZk3Bps~m?xM;~O#I*r!}H0!oxtXd8-&{lneTm}7dlHVfCS`J^(#`?o!im`czNJvsM-h#@)Hp3-aUB)YeTFg`ngM|HTkRpiU=PSQ&) zJS#@LI|Rzup69)`EV5KV5dm?FVW$v*_qTCsLC1P+03P+r{lm~Z6~a!!@Y`-OEaFiS z3l$?UWiyKS%I55JJr&6!P=iW}2_I+-0FTe9D3_`58gcTUA~6h)v&I!nPI1Brs4IuZ-scPK9#%jp{(Vq zn%HmR%8Od(7^C#wOKS~5jqFze^)Dja9On5kteZXosFtvaSQbO%kB8_s9AAypRhJ|FAyK$flf4kp=|%Pd`9k}Do}u?r5z+iV9ijxHqU X7qiShDN`3qW=2;eIt4P9b71lXO~eVB literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.220x176x16.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.26x33x16.bmp old mode 100644 new mode 100755 similarity index 97% rename from apps/plugins/bitmaps/native/solitaire_cardback.220x176x16.bmp rename to apps/plugins/bitmaps/native/solitaire_cardback.26x33x16.bmp index 1810d18ce36b729c3a3174147ff2288dc5c84097..97351cde007d9e3de8cc678d85f362d6779a56b4 GIT binary patch delta 17 YcmZn@Z4;fK#wNtgz#zoEQ74KE03u-nZU6uP delta 17 YcmZn@Z4;fK#&&^~f#Cw{Mx7`w04?nV-T(jq diff --git a/apps/plugins/bitmaps/native/solitaire_cardback.37x49x16.bmp b/apps/plugins/bitmaps/native/solitaire_cardback.37x49x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..8f192ca10cd7591a1277afecb0a1c33e53f18d1d GIT binary patch literal 5542 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 FKLFJOMfU&z literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_deck.169x52x1.bmp b/apps/plugins/bitmaps/native/solitaire_deck.169x52x1.bmp new file mode 100755 index 0000000000000000000000000000000000000000..b7ceccbe93e05eb3e6c159299438e4acfa111255 GIT binary patch literal 1310 zcmb`G!Ask46vw+^^)TDPKSx8f$~R}4<{clFVw{@-SRz`nHUu3{W#kd|y3az6hHbBqL>4K1~m-mMKao1o`R zalgP=I66@~cg1@8hLuF@I zzxhYs%8wPd%5By0`q&)5S188#2AQc7vjQ>6gP+uiry}=?54N4o(;2pZAZ*x64}s%p znlZHiHkP*%s*WkfP|J1Ta>0AH!fl2T=kg-i^Xv?zN9TcC`LW6^wN527_UTnMxFitg zJQ2wdQ?sCxyZt%JuDQayeWG`J$1#>*-?%EkmAu-<`(Q~c8?=-sTbO1T;Mn7>%DVRn zO83W+>=v7H+V|xjeyn_2<#yG3%aFlYGdPkhCbJZ|3OO6ZVJBy$AU0OA`EZS!7(t5X zYXhzO|0lPr-rE6ROlE#e9c#fufynVhB13g^#-Wj_qKiXl-4UqAlF-BASguj`+toQp}eXYjq+ q7ax9p?ih=(fGeT^ literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_deck.195x80x16.bmp b/apps/plugins/bitmaps/native/solitaire_deck.195x80x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..bb3a6ff5a7440ccc577a720405e8168b1bf39d52 GIT binary patch literal 47094 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_deck.195x80x2.bmp b/apps/plugins/bitmaps/native/solitaire_deck.195x80x2.bmp new file mode 100755 index 0000000000000000000000000000000000000000..d6247d853780d77d1228e5b979f683d2a4514297 GIT binary patch literal 15752 zcmeHNJB}3D&@-n1mFG6+lEnL_~;&^SjqBPgTzY zz0uGu`q5QBzUO{zS9#og{^j?do%Hzv*N^f25#O)yJ)hpk)t?VPIGy-?50Kx-$H&vd z!^7##n>S(H#O)4Q-1X(e7BD|*@gnSou2I0vo#7tA(s`Clmv%c$S-GM*Pf-o_`R4U1wHBiC{ zDvy?m40e%Msf*dt3L}md=?uZVgVnZ-$fl?$P3d9^F0ee<%LWuB4wMyzCaH29kYwnT zZsi}{1&TJvP?~iGVavLZuw4*Z5VS6v6O<~14_!-JZkQyxmewxFJG2AUK7+4Ja$o&_=05(@Z|TjS$G{q z`(aD@Xg%4cVYA)68UwP9}(^b{PqSZ#oAV zzkrCYq~2QuB8TiUz>yXOG9Reo&;q+(Y?Hx=nPWLhf(7Z@UxmR^x(0-L$EgEI1UN3whhWU@Qby(3-7vSS<1kx4b(-rHXXbDp9Kn|lq0dUuc6d#|}i2+R() z1c_o>QldlYLPi{()4Qg&WccU;$oYNTN*COuR;Cyy_Dj@J_7(?9$PDgM zU6WYkR)!VTtlQiUlD_!&LsiPR}9as(SwQXab6Wf*SBI5X~DhGOQk>=iZ{EDhpg z2q|5j-V?NdnSmEE`!JWNie_#tbZ<0DD$+!@y&;wPf(C8bP8vS3jA-+Epo7gO0~YZg zb{Pp0b*8m~deZY1R5>JxhG-1-i)}LCo)!0C&>;gFe%ba{;V?K;*x;H@N4@KkL_-@3 zME=sQcMdJ#vkTF`l7$C(3t9Uz^_(u>&+QkD+H=bymqQv1c7e5vO5T*dn@vVdqps*P z8x#hn@KjN@@a+Pi(84MF0$*&C!9U-pVPTP0ID({PNN?nCQ4PX1U$~|@u{5jwUeIFU zJfGltkP-#!5}3Pxo)g*IkV#!lxx5vXkD2T!Y~-LLGF)&9)yGcge3hePM3s6t7)0Te z1cj7LNf{@et++CFs!|*%;RG{OGa2k6uTmGYr4>dTEz%i+`Okl!en9Z>#c;0n_vtr? z9RE~EUK^^&Gt@jSGD|$ju5*(YDBD{y88M}1Lm-_TmvpOJ+>&zYU<&d76Tk;tPqBg! zYIq`DU=p0kJUZSdW1(d>%h6(L3;X0art0X}u(-n!T4(;o&MC-`uLY^)Uf;G*b5A;y z%7YpV=B zjo!4#O4IR)aKPGk|MHV;N$_@3LwChwh zYF8mSIFZ7HOdHx#OBWc`(xp`2p}U3JWt1ax4|P3fOy+Y5Hl2yRyvim+vw`)gv1Am7 z+ZXX#s%I-Ji@a;iGnFH#sn=3D)VS>FUY07_$&o^8%bm+^R4#UrzowNd|9o`i@iY8C zbD*P>j$C*&qoa{D$jeCy?}RxTDY!_Vz*3R!6RAzgGMf{W-?&RKJHJo=%5d-1LB=`8*!VHF@S2bLwZJ+LM+ zl?O9HvZcF7XUH6Qcw6>?kow*^RD9)jot#oyk;~bO%HW_J?$~PTUS!>wSbQj7BY(#2Eu6i76=>e z&vgr##84vF>^<^jDZ`mep^h_@RAOI>>mbR*_YXyK-Iu?vJA6g|!wux{$qnT2tCx^h z2iHxnz$_nP=9yb9xzRgI7qT^5_lb12>Gj4~`7C>dO$JMu z98(ko!g%Tl1ZaW!Hos4Qsw$}net$Cw(E@1&9WTAfP!4=xm!r)l!x{2j=BQ9-MQQkr zp7b0BRzcB6T+qElkiOU^!#SYnag@>(R2f-Hhv92MK9|sgD+kMOY9%osi{x|K?XJKJ>APvmSHl*Kgf-TDYXWi{mx|19!anEf^&_(0k^(z AM*si- literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_deck.234x92x16.bmp b/apps/plugins/bitmaps/native/solitaire_deck.234x92x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..9af3236b6c24660608072df0044fb1c607ce54f7 GIT binary patch literal 64822 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_deck.234x92x2.bmp b/apps/plugins/bitmaps/native/solitaire_deck.234x92x2.bmp new file mode 100755 index 0000000000000000000000000000000000000000..f03fe558b538b6e29912fbd042ad3a55073b8520 GIT binary patch literal 21784 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%0DL8Gq}f8u_wj`#9%B3 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 F|35IOPwD^w literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_suitsi.13x52x1.bmp b/apps/plugins/bitmaps/native/solitaire_suitsi.13x52x1.bmp new file mode 100755 index 0000000000000000000000000000000000000000..ba9ac412a9d3b37224e8d71eb25948a48b9e5ef9 GIT binary patch literal 270 zcmZ?rxrenGLfCWCsX;0IG$F HA*%xbMmk~~ literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_suitsi.15x80x16.bmp b/apps/plugins/bitmaps/native/solitaire_suitsi.15x80x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..0363cc8bf82c288057e3cd9023200712fae06de3 GIT binary patch literal 3894 zcmeH|F-inM5Jkt>V8O^6XkfetFc&<4cQNn|a~qjcY&wZ%W`@Fo-~I6UR8^=)@ZLrht9S&?XY+i7^D@kVjyQ$)PVKcpFa04hg>S+Xhr@kkvJiOv3z)W6 zUQba5fAT&!lp~h}J&VWpUvw)rEc$3EPxr?z%Lp?anBsiEd|CQC5aN>e&g(q%l7~1= jlaq*{2u1+Kmmwv|s``5etl=BLg>gH($^U@9#1`?zeif)Dx6(O6}2op4HQ0f6D P2TfvtBqj*L#eZ&oY)c98 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_suitsi.18x92x16.bmp b/apps/plugins/bitmaps/native/solitaire_suitsi.18x92x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..8f516fc56da033f7ed0318ca0ca5d418c5a0f3d4 GIT binary patch literal 5206 zcmeH}u};J=42F9%+lhgZ4F+Z&fSnC7-8(Sw01Rv$ka!@((pO+*MnWvNSK_}|brbt{ zq^m%HNYtiI?C)&<)v39-yguyGILCa7dyRX8d(|Cb?z&_6*9UT^4NT*r(Ks$!tjp8$ z78j?+G3HLrUU2Qn-Q2zj2ZN$4-^1gFKr&NpR{j!F4t+|oKx&mvu< zk45i6P%4M2<8)CE8ujw4H|8{i8jYi}RQ|U-e%k$ydJe;|ng%{RSWarp&p;PNDFobc zS82c_8DZ$ooXv6wK{#rg%AB8Y#oQdmteBI0U^Jx~)qK)T-}kvLSQ-dnP8TUAFEcMs zZN_P}Li=PvzNH*~PEndH$R|y_rXjYUS${st?=;S9vfF98?5oS&{W~sBg?fUJb3uf% z_h61b^mO1j14&komK=pBT5@_!lGuDU2iTI!1HGMV`?Fl$A2iBks`iHt1XbY$H4wte z{_@W2cH_7{O_%T21s`Y}cXVLsa|Z80Q3~N_9Jfg$d3G6L=uV!sc;Qtd!g1briKb z`~_pccw!_u!HZn+d^neJP$DwVvrN+@<2Xv+_Y3{)C8aih&J9aBdm)gARCy&4p$!?a zXsrPH95~_@iL4WpWYN3XZT#0fb+D#L4Z=Zn-TJsPSJF(83ZSp26zLENiCujKDeOWG zp{q>>!iW(%8I=2~W%$0qcOUczRZgkML8^RXeq$w~7Ev9WvRGx@2~(_o6Nz`~s&IF+ m?fa6=R;(WGhuAjMo$!JEODxbL)Xb|G7;vpp*rK|L4Q6l4(+frb literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_suitsi.26x132x16.bmp b/apps/plugins/bitmaps/native/solitaire_suitsi.26x132x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..1fe15b0ba6032440d78dcb07e55cd9eb66d9cafb GIT binary patch literal 10614 zcmeI0y>3)75QR529aY2&5Tw-9h@Orj#Xdj^YT6Xx8TM_^J_YSIL8M5RCQ_Q@WJei| z=FbP^Y60QZU1vNVe?C6GTf`qfeSNpuf8L`#!S@Zm-|#(J9iv^XK4ARyEBWpdXdV{* zOy0}voctq*HA$ZE5gRp^twEPB2v@@4NIkW2qQEOLq8uk0EJ z(42wPNZX!=EhOW~BaJG`rhkPoWP18X8da1{{|aNs^r8LRZnw|>NIm^Uw--w2+iW(1 zM9{-9n(=nK9j30=YqW^>RZm0&amcL@c$fi_2ttea?)qA~2;7jYW|4uXyHliQG_XS! zhB)x70-aX{C?4^mhzf>0ibp)>pTpZO#1Z~sJyc;H%4K~uqr7g2@%X8v{+DmMCOY3uI4Sf)o9)oVV)rTrQYmgwfhoOGN(}l@k@<^kK zvgu!844Iz(kwz6|)4#$PGW}=#TlD?_u>KCrS~1$M!boJxb1(*3^HSIlS@0TIkIZ;O zSc42a5>_Dt@AKJ})G{rK?aP8V@EDA(IW#Zb@A;Qsc&sdmiT$SMfn=2*?HA)tqTZRh z>)9wSI}ce8Q&ElwvaAAhC9jLv(VFL~_-=S#_^D~-|?$Ra!XxOKqW((?8m( zv~c9#-*`U>O?s0fcN%h&BX=EotCQZPhW)w?%IvC*$iP!&6~pFH>`vvM<1OtU{7A3W ztZfpb%$bL7@J~vH$P`xdFw!6^Sj(%B4Q#}V$R0-UEOH3rc!FeLG!KR3r+8n;*|BW$ Mq9?zT`TzWT1iwvH3;+NC literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/solitaire_suitsi.37x196x16.bmp b/apps/plugins/bitmaps/native/solitaire_suitsi.37x196x16.bmp new file mode 100755 index 0000000000000000000000000000000000000000..6655763104401f00f81714f548573413d89df2d6 GIT binary patch literal 22006 zcmeI2zlv2s42Q3^ot32^{wYKdRIs(TwA**E@Ige2eH+nYUqP_iMhj~T3mg5hf$-yG zCX>vZJtE|?d&%Zz^38lR=Wa7EU;TQ0x_Ujw`$PQR!|w%tZ=7!9{dD?_&u`t7->U@P z{v7)%-oC!eXZg$+sPmGsHLfk6O-BzNeQD;0$r+y?Km7y`@5Ao4V1@^n{MdHGOq%!R z?GNQ49s)K6Ii8qQ9)hgZ1kb_*oI*xlZ{Mmn@(tkCri{8sbG?qVsLTs*v5KXKGz*` zhw{lb*5mTI?vOi_Pqwihm(O*F+@XB3jrF*Et~=xo<&$l!$2p&8XJ_~C-r*l)Qj^H> z(E9xRTzQC7FchbG7$d99u1sb&;C*=iPF90JmtuL%GOg#p<4Iq&hd`*zW4%)8ue;0B zDKk%ynsI7)O&oW5+H@{p2FJxa$ft7_bOufh?-|G4{X@~_c|dn0FE1~ZhZva+b@F+T zNud{hq_1Rn65JX!QY>Y?cW-@m48vrVjI{MOli+Q*h z&!PJ#)I-mwAbFLklbJg&YIQM)p3g;$4lkan*d-{RyJ*xVv!?Aq^V$+oFX4N@1G zqUWUt6KWh8;zh13?sk7La#<0p#2v~Aa=bp>r${h-@CQ79+w2U68#&Rg{dt&yqqKN-hmi4)(xlJc!zU-Ohx8voZ~rh&+f-n(0{_$I zDhE7_;Z@qX`=46mm}keVWQw<9&yFph*2zkye6HBDW6P&?vXUvEEB5Tz@@bu{WXk7? zJv+91S|=-+^0{Kqj?MY}2lr9<0_OjJzqPpya#cLXP`s8ueq|`UNNz&WD=5ZL#0HY>(7-qjve4aieJ*2lj8RG*spY|}CAM^a1 zn9PgZ${h1BwFoi-L#q&Phz!CKJe2m1tA8LdkYCaD$ry`F!O$ef!vIERVKY38+5A63 zCjLsVPg>(Kh%>lyk{3Ua3`0E0+jNQlS-iNbNM-qqSc=z_&$z2dW%-O)iq{= 220) && (LCD_HEIGHT >= 176) -# define CARD_WIDTH 28 -# define CARD_HEIGHT 35 -#elif LCD_HEIGHT > 64 -# define CARD_WIDTH 20 -# define CARD_HEIGHT 25 -#else -# define CARD_WIDTH 15 -# define CARD_HEIGHT 13 -#endif - -/* where the cards start */ -#if LCD_HEIGHT > 64 -# define MARGIN 2 -# define CARD_START ( CARD_HEIGHT + 3 ) -#else - /* The screen is *small* */ -# define MARGIN 0 -# define CARD_START ( CARD_HEIGHT ) -#endif - -#include "solitaire_numbers.h" -#include "solitaire_suits.h" + +#include "solitaire_cardback.h" +#include "solitaire_deck.h" #include "solitaire_suitsi.h" -#define NUMBER_HEIGHT (BMPHEIGHT_solitaire_numbers/13) -#define NUMBER_WIDTH BMPWIDTH_solitaire_numbers -#define NUMBER_STRIDE BMPWIDTH_solitaire_numbers -#define SUIT_HEIGHT (BMPHEIGHT_solitaire_suits/4) -#define SUIT_WIDTH BMPWIDTH_solitaire_suits -#define SUIT_STRIDE BMPWIDTH_solitaire_suits -#define SUITI_HEIGHT (BMPHEIGHT_solitaire_suitsi/4) -#define SUITI_WIDTH BMPWIDTH_solitaire_suitsi -#define SUITI_STRIDE BMPWIDTH_solitaire_suitsi +#define CARD_GFX_WIDTH BMPWIDTH_solitaire_cardback +#define CARD_GFX_HEIGHT BMPHEIGHT_solitaire_cardback +#define CARD_WIDTH (BMPWIDTH_solitaire_cardback+2) +#define CARD_HEIGHT (BMPHEIGHT_solitaire_cardback+2) -#define draw_number( num, x, y ) \ - rb->lcd_mono_bitmap_part( solitaire_numbers, 0, num * NUMBER_HEIGHT, \ - NUMBER_STRIDE, x, y, NUMBER_WIDTH, NUMBER_HEIGHT ); +#if LCD_WIDTH >= 320 +# define MARGIN 4 +# define LARGE_CARD +# define SYMBOL_HEIGHT 12 +#elif LCD_WIDTH >= 220 +# define MARGIN 3 +# define LARGE_CARD +# define SYMBOL_HEIGHT 12 +#elif LCD_WIDTH >= 160 +# define MARGIN 2 +# define SYMBOL_HEIGHT 11 +#elif LCD_WIDTH >= 128 +# define MARGIN 1 +# define SYMBOL_HEIGHT 10 +#else +# define MARGIN 0 +# define SYMBOL_HEIGHT 8 +#endif -#define draw_suit( num, x, y ) \ - rb->lcd_mono_bitmap_part( solitaire_suits, 0, num * SUIT_HEIGHT, \ - SUIT_STRIDE, x, y, SUIT_WIDTH, SUIT_HEIGHT ); - -#define draw_suiti( num, x, y ) \ - rb->lcd_mono_bitmap_part( solitaire_suitsi, 0, num * SUITI_HEIGHT, \ - SUITI_STRIDE, x, y, SUITI_WIDTH, SUITI_HEIGHT ); +#define CARD_START (CARD_HEIGHT+2*MARGIN+1) +/* background color */ #ifdef HAVE_LCD_COLOR -#include "solitaire_cardback.h" -#define CARDBACK_HEIGHT BMPHEIGHT_solitaire_cardback -#define CARDBACK_WIDTH BMPWIDTH_solitaire_cardback +# define BACKGROUND_COLOR LCD_RGBPACK(0,157,0) +#elif LCD_DEPTH > 1 +# define BACKGROUND_COLOR LCD_WHITE #endif -#if HAVE_LCD_COLOR - static const fb_data colors[4] = { - LCD_BLACK, LCD_RGBPACK(255, 0, 0), LCD_BLACK, LCD_RGBPACK(255, 0, 0) - }; -#elif LCD_DEPTH > 1 - static const fb_data colors[4] = { - LCD_BLACK, LCD_BRIGHTNESS(127), LCD_BLACK, LCD_BRIGHTNESS(127) - }; -#endif #define CONFIG_FILENAME "sol.cfg" @@ -307,13 +281,6 @@ static char helptext[] = #define NOT_A_COL -1 -/* background color */ -#define BACKGROUND_COLOR LCD_RGBPACK(0,157,0) - -#if LCD_DEPTH > 1 && !defined( LCD_WHITE ) -# define LCD_WHITE LCD_DEFAULT_BG -#endif - typedef struct { signed char suit; @@ -331,7 +298,13 @@ typedef struct static void draw_cursor( int x, int y ) { rb->lcd_set_drawmode( DRMODE_COMPLEMENT ); - rb->lcd_fillrect( x+1, y+1, CARD_WIDTH-2, CARD_HEIGHT-2 ); + rb->lcd_fillrect( x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); +#ifdef LARGE_CARD + rb->lcd_drawpixel( x+1, y+1 ); + rb->lcd_drawpixel( x+1, y+CARD_HEIGHT-2 ); + rb->lcd_drawpixel( x+CARD_WIDTH-2, y+1 ); + rb->lcd_drawpixel( x+CARD_WIDTH-2, y+CARD_HEIGHT-2 ); +#endif rb->lcd_set_drawmode( DRMODE_SOLID ); } @@ -342,16 +315,29 @@ static void draw_card_ext( int x, int y, bool selected, bool cursor ) #if LCD_DEPTH > 1 rb->lcd_set_foreground( LCD_BLACK ); #endif - /* draw a rectangle omiting the corner pixels, which is why we don't - * use drawrect */ + +#ifdef LARGE_CARD + rb->lcd_hline( x+2, x+CARD_WIDTH-3, y ); + rb->lcd_hline( x+2, x+CARD_WIDTH-3, y+CARD_HEIGHT-1 ); + rb->lcd_vline( x, y+2, y+CARD_HEIGHT-3 ); + rb->lcd_vline( x+CARD_WIDTH-1, y+2, y+CARD_HEIGHT-3 ); + rb->lcd_drawpixel( x+1, y+1 ); + rb->lcd_drawpixel( x+1, y+CARD_HEIGHT-2 ); + rb->lcd_drawpixel( x+CARD_WIDTH-2, y+1 ); + rb->lcd_drawpixel( x+CARD_WIDTH-2, y+CARD_HEIGHT-2 ); +#else rb->lcd_hline( x+1, x+CARD_WIDTH-2, y ); rb->lcd_hline( x+1, x+CARD_WIDTH-2, y+CARD_HEIGHT-1 ); rb->lcd_vline( x, y+1, y+CARD_HEIGHT-2 ); rb->lcd_vline( x+CARD_WIDTH-1, y+1, y+CARD_HEIGHT-2 ); +#endif if( selected ) { rb->lcd_drawrect( x+1, y+1, CARD_WIDTH-2, CARD_HEIGHT-2 ); +#ifdef LARGE_CARD + rb->lcd_drawrect( x+2, y+2, CARD_WIDTH-4, CARD_HEIGHT-4 ); +#endif } if( cursor ) { @@ -361,84 +347,28 @@ static void draw_card_ext( int x, int y, bool selected, bool cursor ) /* Draw a card's inner graphics */ static void draw_card( card_t *card, int x, int y, - bool selected, bool cursor, bool leftstyle ) + bool selected, bool cursor ) { -#ifndef HAVE_LCD_COLOR - /* On Black&White or Greyscale LCDs we don't have a card back. - * We thus need to clear the card area even if the card isn't - * known. */ -#if LCD_DEPTH > 1 - rb->lcd_set_foreground( LCD_WHITE ); -#else - rb->lcd_set_drawmode( DRMODE_SOLID|DRMODE_INVERSEVID ); -#endif - rb->lcd_fillrect( x+1, y+1, CARD_WIDTH-2, CARD_HEIGHT-2 ); -#if LCD_DEPTH == 1 - rb->lcd_set_drawmode( DRMODE_SOLID ); -#endif -#endif if( card->known ) { -#ifdef HAVE_LCD_COLOR - /* On Color LCDs we have a card back so we only need to clear - * the card area when it's known*/ - rb->lcd_set_foreground( LCD_WHITE ); - rb->lcd_fillrect( x+1, y+1, CARD_WIDTH-2, CARD_HEIGHT-2 ); -#endif - -#if LCD_DEPTH > 1 - rb->lcd_set_foreground( colors[card->suit] ); -#endif - if( leftstyle ) - { -#if MARGIN > 0 - draw_suit( card->suit, x+1, y+2+NUMBER_HEIGHT ); - draw_number( card->num, x+1, y+1 ); -#else - draw_suit( card->suit, x+1, y+NUMBER_HEIGHT ); - draw_number( card->num, x+1, y ); -#endif - } - else - { -#if MARGIN > 0 - draw_suit( card->suit, x+2+NUMBER_WIDTH, y+1 ); -#else - draw_suit( card->suit, x+1+NUMBER_WIDTH, y+1 ); -#endif - draw_number( card->num, x+1, y+1 ); - } + rb->lcd_bitmap_part( solitaire_deck, CARD_GFX_WIDTH * card->num, + CARD_GFX_HEIGHT * card->suit, BMPWIDTH_solitaire_deck, + x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); } -#ifdef HAVE_LCD_COLOR else { rb->lcd_bitmap( solitaire_cardback, x+1, y+1, - CARDBACK_WIDTH, CARDBACK_HEIGHT ); + CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); } -#endif - draw_card_ext( x, y, selected, cursor ); } /* Draw an empty stack */ static void draw_empty_stack( int s, int x, int y, bool cursor ) { -#if LCD_DEPTH > 1 - rb->lcd_set_foreground( LCD_WHITE ); -#else - rb->lcd_set_drawmode( DRMODE_SOLID|DRMODE_INVERSEVID ); -#endif - rb->lcd_fillrect( x+1, y+1, CARD_WIDTH-2, CARD_HEIGHT-2 ); -#if LCD_DEPTH == 1 - rb->lcd_set_drawmode( DRMODE_SOLID ); -#endif - -#if LCD_DEPTH > 1 - rb->lcd_set_foreground( colors[s] ); -#endif - - draw_suiti( s, x+(CARD_WIDTH-SUITI_WIDTH)/2, - y+(CARD_HEIGHT-SUITI_HEIGHT)/2 ); + rb->lcd_bitmap_part( solitaire_suitsi, 0, + CARD_GFX_HEIGHT * s, BMPWIDTH_solitaire_suitsi, + x+1, y+1, CARD_GFX_WIDTH, CARD_GFX_HEIGHT ); draw_card_ext( x, y, false, cursor ); } @@ -725,11 +655,11 @@ void solitaire_init( void ) /* number of cards that are drawn on the remains' stack (by pressing F2) */ if( draw_type == 0 ) { - cards_per_draw = 3; + cards_per_draw = 3; } else { - cards_per_draw = 1; + cards_per_draw = 1; } /* init deck */ @@ -797,7 +727,7 @@ void solitaire_init( void ) /* init the remainder */ cur_rem = NOT_A_CARD; - count_rem=-1; + count_rem = -1; } /* find the column number in which 'card' can be found */ @@ -1060,7 +990,7 @@ int bouncing_cards( void ) } y = fp_y >> 16; draw_card( &deck[j*CARDS_PER_SUIT+i], x, y, - false, false, false ); + false, false ); rb->lcd_update_rect( x<0?0:x, y<0?0:y, CARD_WIDTH, CARD_HEIGHT ); @@ -1101,10 +1031,7 @@ int solitaire( void ) while( true ) { #if LCD_DEPTH>1 - rb->lcd_set_foreground(LCD_BLACK); -#ifdef HAVE_LCD_COLOR rb->lcd_set_background(BACKGROUND_COLOR); -#endif #endif rb->lcd_clear_display(); @@ -1120,13 +1047,32 @@ int solitaire( void ) { j = 0; c = cols[i]; - while( c != NOT_A_CARD ) + + if( c != NOT_A_CARD ) { - if( deck[c].known ) j += 2; - else j ++; - c = deck[c].next; + while( true ) + { + /* don't include the last card in the column length. */ + if( deck[c].next == NOT_A_CARD ) + { + break; /* no successor: get outta here. */ + } + else + { + if( deck[c].known ) + j += 2; + else + j++; + } + c = deck[c].next; + } + /* make column distinguishable from an empty column, + * and avoid division by zero while displaying */ + if( j == 0 ) + j = 1; } - if( j > biggest_col_length ) biggest_col_length = j; + if( j > biggest_col_length ) + biggest_col_length = j; } /* check if there are cards remaining in the game. */ @@ -1149,14 +1095,16 @@ int solitaire( void ) /* draw the cursor on empty columns */ if( cur_col == i ) { - draw_cursor( MARGIN+i*((LCD_WIDTH-2*MARGIN)/COL_NUM), - j+1 ); + draw_cursor( MARGIN + i * (CARD_WIDTH + +(LCD_WIDTH-COL_NUM*CARD_WIDTH-2*MARGIN)/(COL_NUM-1)), + j ); } break; } - draw_card( &deck[c], MARGIN+i*((LCD_WIDTH-2*MARGIN)/COL_NUM), - j+1, c == sel_card, c == cur_card, false ); + draw_card( &deck[c], MARGIN + i * (CARD_WIDTH + +(LCD_WIDTH-COL_NUM*CARD_WIDTH-2*MARGIN)/(COL_NUM-1)), + j, c == sel_card, c == cur_card ); h = c; c = deck[c].next; @@ -1165,13 +1113,15 @@ int solitaire( void ) /* This is where we change the spacing between cards so that * they don't overflow out of the LCD */ if( h == cur_card ) - j += SUIT_HEIGHT+2; + j += SYMBOL_HEIGHT; else if( deck[h].known ) - j += min( SUIT_HEIGHT+2, - 2*(LCD_HEIGHT - CARD_START - CARD_HEIGHT)/biggest_col_length ); + j += min( SYMBOL_HEIGHT, + 2 * (LCD_HEIGHT - CARD_START - CARD_HEIGHT - MARGIN) + / biggest_col_length ); else - j += min( SUIT_HEIGHT+2, - (LCD_HEIGHT - CARD_START - CARD_HEIGHT)/biggest_col_length ); + j += min( SYMBOL_HEIGHT / 2, + (LCD_HEIGHT - CARD_START - CARD_HEIGHT - MARGIN) + / biggest_col_length ); } } @@ -1185,7 +1135,7 @@ int solitaire( void ) draw_card( &deck[c], LCD_WIDTH-(CARD_WIDTH*4+4+MARGIN)+CARD_WIDTH*i+i+1, MARGIN, - c == sel_card, cur_col == STACKS_COL + i, false ); + c == sel_card, cur_col == STACKS_COL + i ); } else { @@ -1201,7 +1151,7 @@ int solitaire( void ) { /* gruik ! (we want to display a card back) */ deck[rem].known = false; - draw_card( &deck[rem], MARGIN, MARGIN, false, false, false ); + draw_card( &deck[rem], MARGIN, MARGIN, false, false ); deck[rem].known = true; } @@ -1225,9 +1175,9 @@ int solitaire( void ) { draw_card( &deck[prevcard], j, MARGIN, sel_card == prevcard, - cur_card == prevcard, i < count_rem ); + cur_card == prevcard ); prevcard = deck[prevcard].next; - j += NUMBER_WIDTH+2; + j += CARD_WIDTH/2; } } if( ( cur_rem == NOT_A_CARD || rem == NOT_A_CARD )