From d9b142c4f5c5b6d06744157a75e4f69d45b84279 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Alexis=20Laferri=C3=A8re?= Date: Tue, 13 Jun 2017 10:36:02 -0400 Subject: [PATCH] gamnit: add an example to showcase fonts support MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Alexis Laferrière --- lib/gamnit/examples/fonts_showcase/Makefile | 14 + lib/gamnit/examples/fonts_showcase/README.md | 5 + .../fonts_showcase/assets/Josefin_Sans/font.fnt | 1177 ++++++++++++++++++++ .../fonts_showcase/assets/Josefin_Sans/font.png | Bin 0 -> 17118 bytes .../examples/fonts_showcase/assets/anchor.png | Bin 0 -> 1629 bytes lib/gamnit/examples/fonts_showcase/package.ini | 11 + .../examples/fonts_showcase/src/fonts_showcase.nit | 177 +++ 7 files changed, 1384 insertions(+) create mode 100644 lib/gamnit/examples/fonts_showcase/Makefile create mode 100644 lib/gamnit/examples/fonts_showcase/README.md create mode 100644 lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.fnt create mode 100644 lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.png create mode 100644 lib/gamnit/examples/fonts_showcase/assets/anchor.png create mode 100644 lib/gamnit/examples/fonts_showcase/package.ini create mode 100644 lib/gamnit/examples/fonts_showcase/src/fonts_showcase.nit diff --git a/lib/gamnit/examples/fonts_showcase/Makefile b/lib/gamnit/examples/fonts_showcase/Makefile new file mode 100644 index 0000000..0c6b3b5 --- /dev/null +++ b/lib/gamnit/examples/fonts_showcase/Makefile @@ -0,0 +1,14 @@ +bin/fonts_showcase: $(shell nitls -M src/fonts_showcase.nit -m linux) + mkdir -p bin/ + nitc src/fonts_showcase.nit -m linux -o $@ + +android: bin/fonts_showcase.apk +bin/fonts_showcase.apk: $(shell nitls -M src/fonts_showcase.nit -m android) + mkdir -p bin/ + nitc src/fonts_showcase.nit -m android -o $@ + +check: + nitunit . + +clean: + rm -rf bin/ diff --git a/lib/gamnit/examples/fonts_showcase/README.md b/lib/gamnit/examples/fonts_showcase/README.md new file mode 100644 index 0000000..039d3e0 --- /dev/null +++ b/lib/gamnit/examples/fonts_showcase/README.md @@ -0,0 +1,5 @@ +Simple application to display and test the behavior the different `TextSprites` settings. + +# Artwork + +The font Josefin_Sans is published under SIL Open Font License 1.1 by Santiago Orozco diff --git a/lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.fnt b/lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.fnt new file mode 100644 index 0000000..397d2f6 --- /dev/null +++ b/lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.fnt @@ -0,0 +1,1177 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.png b/lib/gamnit/examples/fonts_showcase/assets/Josefin_Sans/font.png new file mode 100644 index 0000000000000000000000000000000000000000..3e8bd233d103783eff6a8800d72e0c17f3afe934 GIT binary patch literal 17118 zcmV)fK&8KlP)u5V;ws3T#v;4 zORq=jL0|#;)9Lhcy3P8(qor7@1!i#T|NQZII8YxJ1jYlu_xXJOVK&j?zcZo8m?)PQ3Go`)>{1P%a+yEpu4 zrQ}hwx`n_v;`f0+t+YO@2@IH&2Yvw@^Cr*kD(-Vvg-+z{R=V39K&^y3YM)&* z?2g5Abizuf1>;a)SxUgr-vEnci_Vx*^qpGR)J!q{jDw4Ml%$ zt&J-&1hAMNl>U#*O+j@UaQUq}4OjJ9vg4F-^<4X<4B!DaI{#L_4DFPRc4~$*chp!$co_S<;*z2 zd-w`qOb#x_%6U+$CRY-^GcYDI6Yun#!A$f;n?_mSL@Jv+e^~6eFV5LOd>)!a+ zzy38iN0J59TLEJ-(O}Y23+lA##6))>VI(CEFTiiV{q|~Lct;3w@Exd|A1mp0qBZ`7 z8;PzS-w7BF95>kQfNXkf;Nt~;u86LJ%|F6t>28C2+1)cT8oA0{>+Y@i+%6FfzQX@G zPh>b1S17FtDC*W=t;^BFFg>seFvR{SN20?F3WyLhdg)l}^gf9WtKx zlSXx5w9$ak#){);B^H-m*4zKT7K9L%b8wl=G_MNxb4N@sOa_IByCS{`5z^x z9Qu8M?t?@9f~jp7N8Y5gQw2PhOk^XGcGU{W&K!ybP~Ij)ZX*Udm*Tnez6X?q358>Uw7KHoOUccb^Unc)@4Zw{(=y^gf&-D5dRL-w3B~^myS(@=p*F zu=l|s_B#%)C2})P5-8w(;k)*I2c#oSx(ju^GvN4m9mCb8xO$anyac2HNfC6{50lc* z?PM+$-$hA#EBOGw-1WOUt9gP(cFpl=U_kz{ZbD%=f@bu}x$hrr!gP*$- zFKWUAI^eWJyX$Xw(P2T|->sJybO^7sAo47MK11}MUTJAuxI`fobX3nFKB{a`aPz>p znXsZvyoWYzF98hBsu=M?f>d$h9K}MOiYY4k*$XE4kC6G*XU^d{lI(m|-lJ!{&DX61 z!$ULk8TB(|0AmvKPE5N+c4FTh5%|afKw{w7<3Kv=FEn=peuq#Zp&0``lI*U(o0Y~( zfRXsj62J&VJzhwAbij^!CL@7Vaf>5ZGkDx-#atxAT_rVWwp^rOssUprF!ord5RQnT z&PI783{+`UtFe#=6H)^_tXMp~IWQ)_1+xo1H#xRMlOyBdA6 ztxM94?I3qg%|zZPm&Z)ML*PZtt!Z(R3%ESQ9G40%h+3tH{^N*%Zk@1NuwgPZi$#F|8?Ahr)bVN9~ zR7xziQ0x)cWdTF6d)EL)?B`xmO``DUN`p~M5{{QqX3yYmhSa#zL?pN4?OY9pu>M#H zJxE1bh!5;+Kc5TSGnVvP*Sb2A>CVv?1LGt-!PQH=zQ7*`d({`%{$QIJ%V zl#;T}VCT|=Blv8LnUM026&$@gI%gWQH%DaM=nFIF-Wq-kPiioEoH1!};uJltnNB>3 z$C#d=DfwK2mosCXFIj#JlvuLEW+A3Ej3mycUgA&z7$?E4eaMs+Po)~(jZ5pNtT-9m zV(<)84X-vsd|_Y=jI-;S<;QRn>F5{XPfF*AOtDkuqMoVfX3jg!M0iqzL_g0;Y2ks* z`W!rEm70wOzJ#fU7oG>coAN3z2#lU_HT2oQNDV8B?ght$ry<*k?hAn7Ne$vNcraRc zNkGfr3Zb%r;TGp^ zuiQ9_sk8%g&d!@DYe`w_7`f78q>_jAX)IvfX~{B24KuJxGd7K0Fz`sC^vW70a!^&5 zD9m0I7&oJ&H)z1%6<<&eQDN6*hR5}amCl*f_w#_^D5BxAXIX7v>`a)Wc}{$u%lj;u z>{wUik?~M!i;r1T75OPjC?11&531-ls{W*3VV;HVQP1Pkb&^OV zcY|;*skiQ&PcR>{8!uLO+ApCgc-%rzGS5;#qbNYN2OgGe*FD9!=K6BHTAB;Ij> z#I@Hlw34*Q1;&}~?n=oqr-kktp4BuLP@q9LaE_Qtzz9Hr6swfz_4qKIy}y98$OZ<@ zGFKKVC4oWjyA&`6EG-f=2yV3$CrVT}{+=Coobiz?`W)#f99-Ap| z=@dPtz7D%)^`oU3Gzf+UWhww;4k(<>?kU7fz)+ZweJ!hmGVP<_QSL(CIOREmSgn@13Jcm(cQgujQ^|GYT;aGC7F?iU zONm64jwk+Q@k=DUWIOu#Il!QkH$!XRMf9KRQox|`5ru<`KFggWNzsl-H>N7Xt0hg) zAOvPDS$vO0?~gzJ=yF`jGkyAAh*=R_Tg@dd&@{lfq}<;L*2H1S_{U9Pk)<>UQ%OJF z4FnjJMQ@*)SjVMVAqqG$N8EMEV>cs+HVAr~q=j1fw2OCL%1yoYxTQM(!GgIAt;#u{JL;%HwGYW6>XoELt{>y0#^h{) zvyQ8ow7SOx4yRz+on6B;4hU40k;4bm>ujm?wXFi}Q$XL3gV_Xw1dWpEev}WC`?#DIV3NA_5L`e2=kWS!K)%yZq5-AZnjRFci z&L_pu`SJ-cM)Wf=7E;*bED4NQ`~lT{T+DloV`8IS=P>n2&1pLHizg9HS#nL-=lq$q z1Y*|R*OeZ?BB1Xbwg3z~X;yl?GnZ$u;pa5VyEEs|-Rc|z7xi;dzTbcUohqWYSc#n` z6|E*PXh9G>Ta4!lK%4M|a8yzB|87d1r?d!KJ5E9s-o6M`_RAxeC%_cfo|vQL0iWRl za)_|4U*jkd3W6T)NaL!!5;lL}xlM@brHY`FrvQ-0G2w+QX&C4Zcvr#AVL`2!9TLdi zJKch-#Ii5XWuQMfH3VR2$=q_xNjN6&G~}P?Fi;H`6^fvx`M*;>c$5H@<=|qIL*Qlr z5|o^($-_)$BcT>hURNY8Ee`&Uca?&nx5UqI<-j3ibT0~wf+A?|=z#A~7de33CJSeK zJs(&vfWIR)m)vvjx#L~4c~1Fc>P1u&rf6SX>VWF$d8}<6ngfgli=d~RSL$v^WRIo2 zXf(A?DD*iSo<7MF&+y%txoQ>GbBQ&vATaiZlpr8|>!1aOb$Hz}b)FhU(4D}4-kBL* z>Huvhjo<6k?2Z=`C->Uh$vnDnu$?e>ZgS{-rn4n|eAVP$GUqrhM)!qzH+ z=2~b}VHG@a=WOB(yeM`dHpf(F+(K4~%KJ-W3n>Xu5f~FNXB0tmc`nuRLT^&vPeF5D z#1;HPU`XHZR|3YIBIw205U0j&)MUlgQC9!BFBM_kIxuLW(O-Z4)w_Q)JA76V^p=3( zj(|?^+TG2<-2^rc3@*{=NdE6o_&nMoX!f}?IzqkYc%_a(EBPx>AkHd+&S1*95ZC&p z0izx;E(`EZ%q@b}rW{N;EU1slqNxDS@;QV?+Ci~;|B)8~BPd#`#L{0}1Z@M28qV({ zE*2}Gk;pS&T_DYovBAYuY*$x$UIdIF4X#ot!rUtMoo>pmt1#@GV3IhqHD!*yDKJ>) zQYFH(>>wJ-$kN6(4uZru)jmE($(QjVz}O>8V&EddC{D7g2@LKip`&n7pE`#1mR9He zyix@Wh1|I=&9#By@oOOF{aVW2r0K(b9m#E^K&OUgpL`zr3^O`6I>0YNjW9B)V2=ob zYXgJwYvj@$|I8T(6t#9-N`f7!iM%v@QqiK|hqUHW%8p*eiZ@aC zM?M5xAfs)t>+(anhuXgg7{`T8K*#HWcVtNs^utkH5@wvo>Zs;|IkX7azSLc@pi{FI z?!1hUmaYK|=O0)iB)$9Xx8DX~;d6_i55i9GUMlV~&!=EPQ`A4!G<>`Q7)UJFRysRZ z4q!egNv0YwQlKClp2t@JBZDSV?f)TV5+4H$Hg%uTF_K3KEIQX6iQ4Fl%U27GE7R)g zCwBt~$6}FQfhj0cS>PrtVt$V?*D689N|Zj3YiadU01U5JN+~eV`^^bW2OSRtU`)MK zDR(NW661niJ^b7S6PIdKvl=jj)(bFBi6cOwlE&jglWFDv138aM;}JoOLjcAgF%?um zIbh6C8b_}CfukjazdJz8RX&9f_bu}XVWj{Aj1HUaF2{rxk(*z^vI{OcLW=tSTY;hK z^y7HJY67DmYw9LFD+3IVyu>N+_#JTZGUe`EDtGgpfN@B5K5*wT&Kao%j0}C_#2q18 ziQ%LmR>YCS@BoK;sO`QP7|vz=z^Q$3A!;Y*PJjLk$^$cYR8$%%^o^i#u>u(9l#b!p z1BAAvC$oj|Vqh2)XQAnRcqijB!Q!+(00MQ}M^fs7ekz6UONtD2Fl7seu>74TmOB5uv4!}NyNqDW!vAQzqrS2;`7ip`k=avOH9pq|t4L7+s zW6S9qha6zQJ!pLgN{*S15UN)=D<%UN;(o!vL~)!m*OeI&)UB#}(A0g+FW2-R;qINQ zA6#IE!X)Bc1vhaZenGUu&n=+2k_TxK4_perU4RGGBXCC5OknKkQRbXoF?OSwy=gyY zJb6R41o)&BKm!a`hj1L@v0|W^z~}{qGsyj+>An>d7dT^c0Ko+Fw7}TKVj4s# zJX8S2NoXfJSusox+L7r`vbxo>GkizB&irD!KPiqJrxW0NxFaMb2D?-rSXT$?5@hg> z5-0>xi+G5MaLx-^2#g)|hmd=7M_P|{k>aG@8DpY9;5r<^zn!B=p`=bb(8UE@ha~6H zwr8ZIV_YOqxGqbGYO+V*d-8)Do*z@Qh!@TwB_;P10wd+&^ps(j5{c)d0@F{PwF(O# zW9@Tg`uH<~S$mIVb6NNHRnRGd;{*8@eiD|)G4gZmA_n1fDIKr?7)PNU6)u{(#=NDO zU99I@Bsn~vi5A|6Sa(0P$lQx{k@We;%*oI$;tucHSdWhaU|g^ywmY9Y5(X|%hxjvA z^JN6KybJia3m%9A4g-uEmKH8^+O=tlkeW`?g8B?f`gqL*hH-ubyKtguSOAQj2}>~# z!d%?l(TMubE=r{tpqSIU(bDyM02_K4T<_%_uSIRtv~gS3dt&=U3QoR*hB0& z7U0{UmGGmPmteayVGZfrd(tE1r73-$b4Zb6I4Xd#bLKDCcMO3eCF&pMy9Uhr10+x7 zW3+51VZTJe96AV@MzI&|oJEpoo$&3zIDw+=)?z7I#+>0fbWoh(%6LTs_FMrNC-bY? z>cBa!7^hKSsv3QVpPGXU@Ar&rza}lyjq7q`V1AC;(B3EX}nW{166O>KVZ10D< zxfx&tQN_|G^)qya8yDWk7d#^h1=MJT*->fgj$1o-=U0lcJNIy!!2n}SHNz1I)PvSj zLc_Wx22B10#8|^#`VOd9>a`XqP*dQ$*#K+b51JlKYiF1K01{nBAH~=^tIejLVX3uqp7IdB} zk|I^lLJ4FNVApmn3?v22FDjGR6fg{Of1eFcv3Q{lF(Dx4l3z7+P2TV43VHw>%0Su? zDUB&9bCN*e`o!9W!c2eDoN$q20*+`1g1#es7w5xTsj(Sm;11%S7ekz6cSw>$$ft-#mPKUwsOg9Ab62HVkVI3@m zEd43dRx29ebCXX&n?S?>gY%qTDu?&k(nUs+2AznIbiv2sK+X1y#=Ohe@-R8@u(5?u zSQfQ_;dXcLVlF8kgQGA)N+b8X?o|5Cj7yxUnJxHfJO^F^jGH4*nSwYlv6utOT~|&5GL36O9QpkK_liiJtC8D_3TwpNS;Zc811IBBB(XRjuuQ=K& zsFGfD6N;T*K3uUf7jlki?ox%?-uxm!y>qU3bpLb0{GHp0*z-M9a?%BnVJ1bg!#)gD zA97-jO3!^@LG;pE)yWFrD$x*W=@@Z0Q>ufLGdo@IjR~bszYiuB<%M1oJN&2SBF~c^s*;ml5r?ff0oFXHrPB z0Wm>uxlU7jPo z%%&KPhPo2PO9u18yo?8x6tog8LPU0yfI)#KC{ewuazjznC6AKneK}4o!)LF@j*woM zmzWn7?*E7-1;JVfob2l=npnJ{#i5mGJ$0KiiNkEr3)Ne2VRu*cC1pb`0gMwDYLqm=9FtT0;GEh*iMC$|7&|0N*93<9-Bb3OHbWfi zPl$i>qd+koB^i}yS1fv&I710A&Q1Zdprn($Rz*4J52K@pl5$g=-vKGq+63UY8y<^I zq!R5)HF+kFp#&Hsqx{}q01PKRF4iI&x$wT78_ewcvExW{EV)WF_&1F)FgXV$z*yV! znFA6oyuUYJG;Xmz9I51FV-;=#3~^IP#_c)y1^(o(^vRFy);3iEds+M%uSVQVqhrrjLrB)C>`Mg6i~+* zj_HjNlgto7cGQK8?}r>l*Ea%2(AkLb=cIt~exf?n4uV7ycR9ewBvMHMBjN(&0Ss+=pPjhJTwpkG{PovgQgrfX?$CN*6~GAUJyOy_0LJd^fDt2^$Dl!4_$78f z*Kfno6>uqkD6@J@In7=S46ouW(mg-~2F#fwtTP+R)=B~+MKaGcRCy>x|J9)Skw5?Z zbEHR>)$C6j28LIos$~_7StYJJgV_*+4mmhkkQQ^`Y zaNIFC|NZZOcLa#90*0q+y`tG}mV--~+IO9EKi3i~k`ea2AArM3vP+Hk=%=Tkc$7cwWy8t7KxxL5zoI3#be2dVuu1!zO`Yc#?Uo zUteRc?(Odw1!~1(N(WLBy4M6oiMe{hRtJCp$DU~7HB(dbRt_#x0T|DTqYN{QDAlxr zr~!BW!pF(zSc!0NwXN5`z6uyH=?|f8 zw+IZFP#UgRf+GbCPu~#;+q?qs3=6{5#CFEdc|Dm8kF|h-71)Urob!ODlux)Hmwu=K zM^gDz5W{*thfnVfJEwXq%a4)jEhdDrS)dhwBL$3y>ne>rzc(%{u%W=;qN8^8Sdk|c z7Th|o4oV5sCBShvk>DN!3`dwYTB#-xv<+C&ZOK!)c?ncVRV4XHVmeDl&0XRXz;1Sp zRiYWEZ;~1{hbk4%)v=&Dm0f`{8zopH;HU+R=^e381DUS7PhMD;R6;AzaJy=WO#Zo; zMpun?QS7vomGcA#R}X{0kpf1F?4DW~BhxtW@rmG=s@z>1gObd{zpV~%2bBzy1;w^J)7$+Oz;I(yNVzC3)kO-; z)xfjq;vUFR^-<%V0tF3XRR#vv6}rg9Zfw+&f`dvD4j2itduc;COYY;ixsKE=Emfj% zV!8$}Xby;CC#QaAvS)jRqvYeqjnX;BD$(duTczH1}T*zM&o47Ih$*BROY#i*wQ>E|W&gK^aV-KN!t2k;DP_BAx zH1jB%cHat&r0xDfU_2|kB77PmFr>s}?Ukx4ZNPX9Fuab^$^zhftO_h=SZQ_;ST8wx1tm+%$pUY{SQi*iDk79C zGCIEt{GZK5ottYpNhKi)duvundWxOCuJ!!MvXN?aD%LHPf<`Ibkny=ZPB(YFI*0l&~oJ)Z!!pE*ZJ1I9ArMn(9F z6ADMfK&hKcE6cte7)Mh#QPv|pQ!>?5lUB6V#++KzZwAH`qPLEv8Zn0pH4kk)$65qs zy}%rJD?-^91LKZ(H0D%Yfr#!n=acnItUxc;9b0^Rh4Ub#_ z(~SFOE1WftkZ%XZ4ezi-ZfMjw#^rn{x+zvwIBQrT4H&lUAA3CQi|0C)Qp|g6lmym-wKQ)<(wkDQgg^cFjLRX0%9$qk!vkS7B+V=BLLn!-vEp|-U-esnW==XZc*WU zj*3UfM^~b$OjKMA&+Lp%k)to|$ZEhKCaUY2C{Q8f@Pl&n0V#&vo#8tKq!iZ^^{(0@ zq~xNxMZyEis8AM;Kz|W4{MS2=$x5ze|#VncwwD0O=zc zc>)s^xvMX9kupu!9ALn4HY7l?)A}qbBm{qbDE)zT3F5BaQ%l8)&S3#yJh(heTU!zX z1)F@+fKkCj#acYm(PyOnyzHbMD*}V%3s-alnvTI#x#hyZ*xRFolIfn`85kY4`9W-B zn;kChGfIb-1{f(&q#DTFO?kyxsv0e&n@tsaFdweg7cTg_O<8zLey+eo&8)xBn64>c z%mu|u{XVd1r1^vYw^rQSDW+G6(O)x^FC7EMJA-1%ALaN^8ISSSeLuk%rA9N_z9Wj4 zmVmJYDE8=_$3*!hz7~9O&M}WO)e+Ee?KHR4cvoejQjRUelPz8}z^2HnV1dDb0y(2f zCB?+}OA3=UX^AQD_bCsnRaPC5Zinag-5TI{CaN+>cA{WXIK0@i9qa8;+_o_&6YD}A0^BY%7M%4m*(1d7)x%4H_y8qC4q^W zS>Lgv-?yGp=@?R*zm-ZAuuns)tCSQ$u}Q`+%x|r4q88*?bb`a{ss#quY!_KMYxe^w z0R}Aem?CR|pIgbbd8=fkltgx?<}60glhiKipaF(+H*;|j)NgFdz)1E;5v0auyEX3& zPb^ZB#KPrETr&I^0K^BCJV^R<8wN(etpO4cHv*!P1bK?vPu%s7`_Fe{g~ zAqN;2LHTxx&PV%a5Gl5Rzcfgsf$=<+IKM_Fd(Na(GcC$@m4VSSH8;}HcW1K6H`yOP z<@(iJed3-}(b7a$FI+x_)i<3 zf1fiiiRU|VRusfd?2$KJlxqw*5|8f$j3w_G)NCk!=fn_-p&b^@%%TC zP*NZbWs2X;#&bR!FzWjnjz%tDxSI_J&fXOmN5SiwlMi|@e6a8Fj!vjenydf*_rFJ@ zh@MsihQx@IlL^&R(^7DLHDJsv75G^Z7`s3I_+u1IK8@61gL6VH%o@PB*x%ce>)L>k zKZ5oV8BU^3DJ_-;1~}S!XHsMH8*!869+6)UjG)q9nQ^w~q=j`rC6B|3&#y}V1OJSD zw(eEd%UsXr;{{epu=5pCBlu1t48H_04qO+dn7;!_k7kuIsS!!y>FI**LsX?X13(Fm+qXdK0&Y6^I z@W4(y#F+RV4lZqm)(X+pfc+Qr3aVSYnENWwhwSseJ~_dg{R&>~z${g|zLVZcEApqE%e}u{xSIlW zCk;(PArs;k2xu?H?u9Bj+v`Xz@(t)oV+)wKkx1jq-PVzO! zj%&IzgPA8Q!PiPgjdBY*#poidSjpUiZtbBmgD#Z3@~!C#1WnJCj!G`$w?5YT{D1j z7oxqJBha54L_2>dFfLg6OfUyN7)Ibz%r^p`N2z;v^P2cg5inkHuPVSOESOIEM6A@< zrIb%aV)B&xY0c5ilE8i%FiH!ix$#UNM6EIQbob*Ur!ZHe0b>PV)EoeU(dts14iLED zx6F6ZfKeYDN9Je#hVaerk+_ zIhh27Ve%>xmdN`9BXe@cTFx?MHukH5F|p=QKZI2{@8-kCoXP$9B4A9Qh!jQd8!%o6 zjIpAQamfV*&CNiujf45X5xgwz$jn_fsHElhR9_pkN?1@hSGF`ig=LH%VU_F|@%d@y zstAe#Y1hov1%WYWq*?0v-)`14<}C(A1IGHmSX23&l6Gfi&NpCuA}}f_xYq`Zm4Gp~ z1_rKz4v}9unoGQmw+F^6#~e_;r30)1V?jqCN+douU~C&0+|KWhFmE{e ziUr7X@3n@>$JVym=;*CBFy6iPw5FLg=UzQ?HXoM;hB8-E6{o?GS4j3X`l_@xwyG=4 z?3x@f7Qc#yv5m6v-1$P=?NVuZql`K4s&uM%f}O0+$c!>wWCE_4euM)fwsYEIYO}-x z?k)?AQbo~A^<(OKKWa>k>S1TmCUve+ovTQ*=ksVmg7XssR^CJ#?mI3fM#N;AbNVFE zH;yr7Igw+cnkUMe^{L*~sS+DrmhxJ~1}r$D9TFESq3B(xh|f6tgO(Mx{7;fNLnUDJ zg3|d>SzRZ{cBT`Y0}e*v8Y#huU9e80#3A0!*Z_$V6bmOTjh_m@2%h)T$_R|r6N2)5 zES7P@6_6%)!6SV`0>vyrI(Da$O3};xEReYODZj}~V0^sNIVpWygB6$VXBQGv7{Z?; z92M|AD+R8aU6rUHzX%pXY!?P}jtT-34j8%0rzZ`!+^fB0Od2`|3Pg1fOOHR?4)xN;3_Dr zsdL`r8n;JJPJM`{bY}8zy@j-ps03@4-0e6eG;*8_f|<)L+(0YC6jTHgpm3c?W=F=4 z_jI1PoxBk3Phd_8lX>KH5+U{w@KY$1&ZiWkrZj0%SE6)&OahQ(`!9j~fICyr9XgKT zS2#`r^7hD)!%8vES7Vj!<2QRcgYL%*7w8W3_YsASJ#qwT5PY^EqIm|e3Pi3)t%vm! zJ)II~)lv#nV2YAtmNQohDCiGot{p|D0{P&iQvw*ClvVb9eQ#h`GcRU`YjPhSDWy$l za(ASPq+`hy+}yp;lSEq@7<4Rv-wnY0+u#275H?5PVJ!gT`vF7IO(*FVS9lL4O2dc1 zQu8AO*1QEO=md17(!yFv*NDUn%r07l(Ta^ z*Spedd1rhVAH}32DxV4OT@7Fu?#K{=QN3ZhCBoteAj*kRlz2WT>E;-K>|A|hmeyVH zEl4}>L5qZ`xu^t2;0F+#O-Ifwg`Zd1G{2f$>)Oul7YF7!J1L12tJc?l&vtIB&-E7ic}@qxj`TaNbXD=8Vww+2xs<3XN`viQei=l>l)SXaW13Rr)ZMz@>0vcTU8cj6Ugwjdodv zy-)UFu3@O9$>^puu>)#yStkic;oD18Ug*Oc-sFzb=iJZW?fX`7&N|E5J8F#C6j|~{} zz8i$~k!cw1P0HnBDpK@E$$MJ?7#Bw)ZN9)mx->9$;4tG_R!4UJk)uwqp2=H6%!~e( znZP(Wk81-)z3*PQ=&fBSE>kS1xJNOOm`QmQ(*0t6+*Eo6fZIJ&14iBN_B47cEH(=w zd#-2ahE(c6UHzzK_> zwg4&vW6EZyU~a%z=DR^wx=SPEBnqnYSQ{97+H|)8V_9HK)#==kLUj;SK44Y`21u_# zGJ6{^miumSWYC>y^Ey&iNC3J@zaaC{lz6}`5 zewTG(%_KOxQ7>!e0-mX|>57mVFxCSGYrf7Pdk4M1bBAZ986Mzy@b@u58!*-b#$75l zLME)5{KSx!5DHdc&$DR=862XUnl1qtC0yqX7%~3<7j@03pN&2T@~UbRh3}j)jCs>3 zYY+a}r%I1G4y6)c1g!rK2tq97l=~d8a5f67*~ym_NGq31yfrW$O7UCL!|X;a2N#B? zM*)CGd89}RYzpA4Po)9FPAZ)kr3en{P7|T@=RydT>UYl5s0g*g=-^odlDVkK`_F&= z^P%Ynk3s7wwB2PsG-)S@dMd4ghoJ0T3*6xjOy?Pq)f3(QH9Hu7qg4`wxg8;zu*g%b z3H3psb6pB?U$_98{mwoH)QtMnyU;hJ0i$3{_CMXp2pphqbQUCcYPu0C;*sOC5X{Ng zXH&tnAbQ(?F>l=9tmKq1*Z&kI26iJCZB$T9-#NuHqRRxa6oo{Zyr~Q1V|+C*CI=7K zfgm-IWa)Bz7K$qMKp)XqObr;zfa3qhLYDZ+`axPX`}g7^tSfOIN~;gGkukX99W}}cQ?;vYWQ?GTVgUtn;9AdQ)H^Z2=$ zJQk|m+sGIP+FYi9_{@uOWb`+mvaet|~4|7m^G-(?I;i>cIc z5Hy)lqz48qF*ylAb1e(#p^x^caz~51obJ;68p;t6#w!%aAk>}U>ttgfj>m%BV{jz2 zh+y`r1jGQp2fpL@&aqqFhVe_tYMbebc7JS_dVN%pw2*e=Noa}LGr({X>0*zxn_`zw z)(rq6rMsY*Pv4flz;v}?b3=PnW#!fm}EutE{!lYkmbNFw%7E|rvGU?wtISH zHkZ57bfw*qVJ8Y=drlLWlXFNZD&V=azL6n2(OMWkGrs$^<48?c0E%Fu))2p*PQ%r( z2(_$pXqtwC{_brUQlknA8eTA~B-Uyf<%x8#Ug!}c^e&ro9P|wsl}uMg$=fdh4Cl$D zPAf(t%mK#OfKfh1t_aDRur-rkI6uZk(I3^*F*1P>9F+|iGfdY+_kfzf2t1_>Fuda+ zgWT=dtdh#6t1>PknW&vLCuu$>w?G5cGwiOuNPdhAXIm%uKbjw-)O4MpblzQl1^kKf zIj zdSRdVHn8cMNwpYVjGO^ri6kgrxu~rL#|a&IdndI7zK)jeS8BQzw$7e(0TA(=<0>_* z!Z}8M@6HG0G#mMU;ahO(f zvVnnV7N*_mva5*l_=Bt$wNwLeXvkjxcvhM`+7YsCDOAg!FpHAmLW;kl(zexw-4DooKkAnDN-?F|MO znx@XJMm_LlBd8n`$kiG!zHE36X(MjqCzB4AE*Zc$Sf#Nuex0e72(FElhv#ZmxQ$DI z(Q$RA&P|S}Bb(l_kr4!^6fu%qV4S6aPtz|p zGQ4(^cF{DVJO>!1&GFiJ(b&^Ub}Qabm4WfVkjJOk$LMjcC(0*1w58aX?*cCrZhXHGFeZJ5$<~e~&zz0#GH;Hr z6$a-5zbpt0uyg`KwFvp_-eqW^jz=wtcj4i=zze$&kQAQ zFk{kFzzE1#Ku@re0i0VGu6>o&H@u);rWxHv;qYAGGs^W+!03d;pMzu>A$`MBj9UTn z@*{A8&zSTSFb3x5XXaS*IyF0L=NV>n8wJBl-z(^DkLoR7k07QI& z)`oI;n!ZpovY4*~KoW_KOq2y2%~SJVtl-o#VF}-on*M<^SM5R%#*cyg&@KTCF-o&a zK4@Gy-NE%ia~E}$!_ToU)GU+F9KEJJ711kxXgkj4a7`Dx@Bh_Q~TpUkV}U2GT_9GUys$W%-!fN9wEtTU^P4FTifBBgL)r<3EaaGVx2 z8_QiLOzO=7Mx%1xCNO^H4(3=<1H&q~&AYiVU>r51CI!H_NV)`#qu3ZqD?Zv9Fu>Yy zM*@zDI^{EU#Mom%OGwW}dYij@qeqELxaqLvf!O+|3j+huJv(bcW40b>UWipVo2z@H zz}Q(y4VFiO5pGA|7i~r9Pjx1-~WDB?0S#A zrzxD<2S&&B_Q)9u*Z2;O44SxOlZcysu~A_3n)VJefpM3>XLBuDZs!Jp;pII@*;cd{ z8UBumXLBdb;mVz$+o%K#$3yWDJ~v%V`~+VykL3<@7<+6?7p;DWBgXnNnj*R}t7O{Q zLXd1{=J!V56AR|dB@3GtMB5}VPLb%T2aHM;VgW^hHG!K?V`IR$(w?Yj2QQJJvu~}n z-w+tF%q>%|bg%*A4S>-LEWrnCRa7i*JWy-JDyS_ZY-7N<;0$imkawyobN_Fx2W`O2 zSv)jyI+X}u--ZQTQ$9BcjM$)=-6~K3h+y$ii|wQRa};{6w-SLj14iyR;c7BaWMSc* z)S+FLThI0H0Y;~Fvm@tLlNR3~F$_ca%BA$7PReb30WgfUE_#<8hGQ$FIbP$x_%dK% z%fz+W#=PJyF7oBTXrlq6jRuT1K4KjI{PWLeUZ*7?X`_uc+GwMV%42E?VQk?MF)!)W z+0V5|=!XyRDGa!sHg-tS3w{otv%#^eX)%tE8{l;uz%5N{R<%{?*1{P~OR)Kv(E%Xl z78|*WH5>D2fv`6pH#j!9@V9GCWg-*?T<9GBjgouXct?GL_CR&1e0E_wd&Ee3!`?3b zlx#zLo3%!}?>VM4J-piiAT}Rj%-ro$^pw&&qxz7hkiO9f@+^^*@D`l8ZdMZDNCAWb zd;RI%Su+eVY%5lNmm`E06xlq>4*4-|02DYPK%vAYD*T@-GsI@Al{6iuI6$d-&Cl@; z(gK$U*t!wNW;11Nr!uZ+GdohyJS;Gu3@~6^nPz+~WpCr- z66v5AbR$B3iRVSr{TX0*;A@OI?=ie8Gb`quNjfmS-g}}SOnu9!jzWL|V^p@)Y-1zC z>uQMlq=F9M9TN%CHP5PHfZS@s?$vE5RPjjR%~_#RuYjdi#L9H)eWE4-(^4g`!7B<)}Yw^gsd$GGA}we*R1PNBr@E}bvK zwa4U|>v9$B3hSngjf}~O#VnljeD+$;r)F5MYHLdKCgXt}S=IuRZ5er}y- z4HR!Qj`+wxycF0xy@0OZ`j$x1RouhGU8uQk(<|Ol3B|es%DBRdc`$qlfy>9>+JRq9 zYp(nLx(4M1N69)lSyxA^z_x^(4;dG#OCa4~G-)D}spJ5_1g33MG(T%}u&^{C7%j9r zB4~Qw1PH9eqT{F~<$TDPvc<9EOKM3$+foQ+15N4tB%K2!16ULiK%@acvEI$Gf#QRu z2LJ?iJ}fpT9Y7BO$pOa*(nq>xiF}E#!zz-a39HaX^Q+SRY+Bt&8*Q}F#utqL2WM+C zN*q+>iU0rrEp$a#bW?9;ba!ELWdLG%E@EtNZ)9Y7E@N_eaCC1jX>DO=WiC)oM=~@; ZZewp`Wpbznf9?PP002ovPDHLkV1g{G4Fv!I literal 0 HcmV?d00001 diff --git a/lib/gamnit/examples/fonts_showcase/assets/anchor.png b/lib/gamnit/examples/fonts_showcase/assets/anchor.png new file mode 100644 index 0000000000000000000000000000000000000000..2aef81f0d8537ee34a02da2f3f9e8e5b92ddbd21 GIT binary patch literal 1629 zcmV-j2BP_iP)kOK~z|UwU=#-ROJ=Nf9HAbopJ9vaVxWgu(CoH_l4{#0lUx& zrlbT)6IWM0&?3I zSn&%%WVeVctp&5zU;iAp&-t32zA|rxkC@zOe$Z#9uiQT8Yv8$CRso=u#!k!lH5g4< zG~9}YTlq4X^EGx_ptTmjS_KR!4^b(TGsgN43wRL(z3=!#0R$A@@<$G zF#ssfOymYAFfbD=r>MN0z^|(;+&ln`Q|#*#k=0e^KclLr0E!Xfz{A}AAUJiEA&dpd zui<-s3}LVYSTb#n|6jP61o&;i<&*_IvJV>OR~Arg8~786iYO9HwCGWQd+Ro zM=5RUZVF_zE$VOhoP!k!Ay|0Xb5Q2vz+zz}4$l%jOEcLQExckR!kv11ttzjB$^O$gJrS z-KhJaF=k?L-(cC?;J!hOF%xdo{jdW0ER1^;ba9T`y2of2Yb|CW1p ziv#jG7tzq+p;ukHHs-JaGGD>iDGMYGZ~!q^7~VaZV&o8*$f&BmI7MBfm?A#o=6ofl zsxM+9ql_GyJTbf*#9RRm7*!o7^mp;`DTDE zx(AeBYHoB7C?=9FS@pdb=LWM{vuqnvdVW`E-89b?opcufoxt6|%ZLs6={w4f8%oz> zA)wgE1z<1mJfJ-J!8Zb){Gb5-Jg_$(o6FsCL)q|_A|?c0&U17Yc+0M15iuC^8scnV z(~x2Q58xk1;7kI}zMUoeAK~6j4nKO~o0d#NcyB9w_L`4duXOafv_Aq1ehBHm!v3`( z1P2MjO{zMnahb9o5D^Elhj5~6S@)7<@l!=)0f;SM7Nv6loov&7ucMC9aPoq bOmO}O=h`>03Ur>H00000NkvXXu0mjf(@OlU literal 0 HcmV?d00001 diff --git a/lib/gamnit/examples/fonts_showcase/package.ini b/lib/gamnit/examples/fonts_showcase/package.ini new file mode 100644 index 0000000..4503def --- /dev/null +++ b/lib/gamnit/examples/fonts_showcase/package.ini @@ -0,0 +1,11 @@ +[package] +name=fonts_showcase +tags=game,example +maintainer=Alexis Laferrière +license=WTFPL +[upstream] +browse=https://github.com/nitlang/nit/tree/master/lib/gamnit/examples/fonts_showcase/ +git=https://github.com/nitlang/nit.git +git.directory=lib/gamnit/examples/fonts_showcase/ +homepage=http://gamnit.org +issues=https://github.com/nitlang/nit/issues diff --git a/lib/gamnit/examples/fonts_showcase/src/fonts_showcase.nit b/lib/gamnit/examples/fonts_showcase/src/fonts_showcase.nit new file mode 100644 index 0000000..0fae76d --- /dev/null +++ b/lib/gamnit/examples/fonts_showcase/src/fonts_showcase.nit @@ -0,0 +1,177 @@ +# This file is part of NIT ( http://www.nitlanguage.org ). +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the Do What The Fuck You Want To +# Public License, Version 2, as published by Sam Hocevar. See +# http://sam.zoy.org/projects/COPYING.WTFPL for more details. + +# Font support showcase +module fonts_showcase is + app_name "gamnit fonts" + app_namespace "org.gamnit.fonts_showcase" + app_version(1, 0, git_revision) + android_api_target 10 + android_manifest_activity """android:screenOrientation="sensorLandscape" """ +end + +import gamnit::flat +import gamnit::bmfont + +redef class App + + # Asset font used to display text + var font = new BMFontAsset("Josefin_Sans/font.fnt") + + # Anchor texture used to identify the anchor coordinate of each `TextSprites` + var anchor = new Texture("anchor.png") + + redef fun on_create + do + super + + for tex in all_root_textures do + var error = tex.error + if error != null then print_error "Texture '{tex}' failed to load: {error}" + end + + update_text + end + + # Draw or redraw all the `TextSprites` + fun update_text + do + # Remove existing text and sprites + ui_sprites.clear + var texts = new Array[TextSprites] + + # Shared content + var description = "The anchor icon identifies the coordinate of TextSprites::anchor." + var lorem_ipsum = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua." + var color = [0.0, 0.25, 0.5] + + # --- + # TextSprites (the interesting part) + + # Aligned text (no max_width) + texts.add new TextSprites(font, + ui_camera.top.offset(-400.0, 0.0, 0.0), + "Left, align=0.0:\n"+description) + + texts.add new TextSprites(font, + ui_camera.top.offset(-400.0, -100.0, 0.0), + "Right, align=1.0:\n"+description, align=1.0) + + texts.add new TextSprites(font, + ui_camera.top.offset(-400.0, -200.0, 0.0), + "Center, align=0.5:\n"+description, align=0.5) + + texts.add new TextSprites(font, + ui_camera.top.offset(-400.0, -300.0, 0.0), + "Weird, align=0.2:\n"+description, align=0.2) + + # Aligned with max width + texts.add new TextSprites(font, + ui_camera.top_left.offset(100.0, -400.0, 0.0), + "Left, max_width=400.0:\n"+lorem_ipsum, + align=0.0, max_width=400.0) + + texts.add new TextSprites(font, + ui_camera.top_left.offset(1000.0, -400.0, 0.0), + "Right, max_width=400.0:\n"+lorem_ipsum, + align=1.0, max_width=400.0) + + texts.add new TextSprites(font, + ui_camera.top_left.offset(300.0, -700.0, 0.0), + "Center, max_width=400.0:\n"+lorem_ipsum, + align=0.5, max_width=400.0) + + texts.add new TextSprites(font, + ui_camera.top_left.offset(680.0, -700.0, 0.0), + "Weird, max_width=400.0:\n"+lorem_ipsum, + align=0.2, max_width=400.0) + + # Max width & height + texts.add new TextSprites(font, + ui_camera.top_left.offset(1100.0, -400.0, 0.0), + "max_width & max_height:\n"+lorem_ipsum, + max_width=600.0, max_height=150.0) + + # Thin max_width with overflows + texts.add new TextSprites(font, + ui_camera.top_left.offset(1100.0, -600.0, 0.0), + "The 1{plu}st{pld} word of a line can always overflow:\n"+lorem_ipsum, + max_width=100.0, max_height=400.0) + + # No wrap + texts.add new TextSprites(font, + ui_camera.top_left.offset(1300.0, -600.0, 0.0), + "wrap=false:\nLong lines are cut short blah blah blah\n"+lorem_ipsum, + max_width=400.0, wrap=false) + + # Bottom align + texts.add new TextSprites(font, + ui_camera.top_left.offset(1300.0, -1000.0, 0.0), + "valign=1.0:\n"+lorem_ipsum, + max_width=400.0, valign=1.0) + + # Center valign + texts.add new TextSprites(font, + ui_camera.top_left.offset(1500.0, -220.0, 0.0), + "align=0.5, valign=0.5:\n"+lorem_ipsum, + max_width=400.0, align=0.5, valign=0.5) + + # --- + # Anchors and background boxes + + # Gradient background for the max_width texts + var box = new CustomTexture(400.0, 200.0) + for x in 400.times do for y in 150.times do + var p = 1.0-1.0*y.to_f/150.0 + p = p.sqrt + box[x, y] = color + [p] + end + box.load + for i in [4..8[ do + var t = texts[i] + ui_sprites.add new Sprite(box, + t.anchor.offset((-t.align+0.5)*t.max_width.as(not null), + -100.0, -1.0)) + end + + # Plain boxes for max_width and max_height boxes + var large_box = new CustomTexture(600.0, 150.0) + large_box.fill color + large_box.load + ui_sprites.add new Sprite(large_box, texts[8].anchor.offset(300.0, -75.0, -1.0)) + + var thin_box = new CustomTexture(100.0, 400.0) + thin_box.fill color + thin_box.load + ui_sprites.add new Sprite(thin_box, ui_camera.top_left.offset(1150.0, -800.0, -1.0)) + + # Other TextSprites + ui_sprites.add new Sprite(box, texts[10].anchor.offset(200.0, -100.0, -1.0)) + + var s = new Sprite(box, texts[11].anchor.offset(200.0, 100.0, -1.0)) + s.rotation = pi + ui_sprites.add s + + ui_sprites.add new Sprite(box, texts[12].anchor.offset(0.0, 0.0, -1.0)) + + # Add the anchor effects to all TextSprites + for t in texts do ui_sprites.add new Sprite(anchor, t.anchor) + end + + redef fun accept_event(event) + do + if event isa QuitEvent or + (event isa KeyEvent and event.name == "escape" and event.is_up) then + # Quit abruptly + exit 0 + else if event isa KeyEvent and event.is_up then + update_text + end + + return false + end +end -- 1.7.9.5