From c182086fbc039ec2b943b4d109597ccc481b7ba4 Mon Sep 17 00:00:00 2001 From: Daniel Karbach Date: Sat, 11 Aug 2012 19:58:56 +0200 Subject: [PATCH] forced fonts to use the data's charset --- src/graphics/Font.cpp | 8 ++++---- src/graphics/Font.h | 29 +++++------------------------ src/main.cpp | 32 ++++---------------------------- test-data/large-font.png | Bin 1633 -> 1748 bytes test-data/normal-font.png | Bin 1170 -> 1258 bytes 5 files changed, 13 insertions(+), 56 deletions(-) diff --git a/src/graphics/Font.cpp b/src/graphics/Font.cpp index d3a3de0..3e46249 100644 --- a/src/graphics/Font.cpp +++ b/src/graphics/Font.cpp @@ -19,9 +19,9 @@ using std::pow; namespace graphics { void Font::DrawChar(char c, SDL_Surface *dest, Point position) const { - if (!HasChar(c)) return; - const Mapping &m(map[(unsigned char)c]); - sprite->Draw(dest, position, m.col, m.row); + int col(colOffset + (c % 0x10)); + int row(rowOffset + (c / 0x10)); + sprite->Draw(dest, position, col, row); } void Font::DrawString(const char *s, SDL_Surface *dest, Point positionIn, int maxChars) const { @@ -33,7 +33,7 @@ void Font::DrawString(const char *s, SDL_Surface *dest, Point positionIn, i } void Font::DrawDigit(int digit, SDL_Surface *dest, Point position) const { - sprite->Draw(dest, position, digitsCol + digit, digitsRow); + DrawChar(digit + 0x30, dest, position); } void Font::DrawNumber(int numberIn, SDL_Surface *dest, Point positionIn, int digits) const { diff --git a/src/graphics/Font.h b/src/graphics/Font.h index 082e4c0..70f451c 100644 --- a/src/graphics/Font.h +++ b/src/graphics/Font.h @@ -11,18 +11,16 @@ #include "Sprite.h" #include "../geometry/Point.h" -#include #include namespace graphics { -// TODO: maybe fix fonts to use a 8x8 tile sprite for all chars class Font { public: - explicit Font(const Sprite *sprite, int digitsCol = 0, int digitsRow = 0) - : sprite(sprite), digitsCol(digitsCol), digitsRow(digitsRow) { - MapRange('0', '9', digitsCol, digitsRow); + explicit Font(const Sprite *sprite, int colOffset = 0, int rowOffset = 0) + : sprite(sprite), colOffset(colOffset), rowOffset(rowOffset) { + } public: @@ -33,27 +31,10 @@ public: void DrawDigit(int d, SDL_Surface *dest, geometry::Point position) const; void DrawNumber(int n, SDL_Surface *dest, geometry::Point position, int digits = 0) const; -public: - bool HasChar(char c) const { return map[(unsigned char)c].mapped; }; - void MapChar(char c, int col, int row) { map[(unsigned char)c].mapped = true; map[(unsigned char)c].col = col; map[(unsigned char)c].row = row; }; - void MapRange(char from, char to, int colStart, int row) { - int col(colStart); - for (unsigned char c(from); c <= to; ++c, ++col) { - MapChar(c, col, row); - } - } - private: - struct Mapping { - Mapping() : mapped(false), col(0), row(0) { } - bool mapped; - int col; - int row; - }; const Sprite *sprite; - Mapping map[256]; - int digitsCol; - int digitsRow; + int colOffset; + int rowOffset; }; diff --git a/src/main.cpp b/src/main.cpp index 4b4ca58..b4be5be 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -155,15 +155,7 @@ int main(int argc, char **argv) { SDL_Surface *largeFontImg(IMG_Load("test-data/large-font.png")); Sprite largeFontSprite(largeFontImg, 16, 32); - Font largeFont(&largeFontSprite); - largeFont.MapRange('A', 'M', 0, 1); - largeFont.MapRange('N', 'Z', 0, 2); - largeFont.MapRange('a', 'm', 0, 3); - largeFont.MapRange('n', 'z', 0, 4); - largeFont.MapChar(':', 10, 0); - largeFont.MapChar('!', 11, 0); - largeFont.MapChar('?', 12, 0); - // TODO: add '.' and '-' characters + Font largeFont(&largeFontSprite, 0, -2); battleRes.titleFont = &largeFont; SDL_Surface *heroTagImg(IMG_Load("test-data/hero-tag-sprites.png")); @@ -182,7 +174,7 @@ int main(int argc, char **argv) { SDL_Surface *numbersImg(IMG_Load("test-data/numbers.png")); Sprite numbersSprite(numbersImg, 16, 16); - Font heroTagFont(&numbersSprite); + Font heroTagFont(&numbersSprite, 0, -3); battleRes.heroTagFont = &heroTagFont; SDL_Surface *tagFramesImg(IMG_Load("test-data/tag-frames.png")); Frame heroTagFrame(tagFramesImg, 16, 16, 1, 1, 0, 33); @@ -210,28 +202,12 @@ int main(int argc, char **argv) { SDL_Surface *normalFontImg(IMG_Load("test-data/normal-font.png")); Sprite normalFontSprite(normalFontImg, 16, 16); - Font normalFont(&normalFontSprite); - normalFont.MapRange('A', 'M', 0, 1); - normalFont.MapRange('N', 'Z', 0, 2); - normalFont.MapRange('a', 'm', 0, 3); - normalFont.MapRange('n', 'z', 0, 4); - normalFont.MapChar(':', 10, 0); - normalFont.MapChar('!', 11, 0); - normalFont.MapChar('?', 12, 0); - // TODO: add '.' and '-' characters + Font normalFont(&normalFontSprite, 0, -2); battleRes.normalFont = &normalFont; SDL_Surface *disabledFontImg(IMG_Load("test-data/disabled-font.png")); Sprite disabledFontSprite(disabledFontImg, 16, 16); - Font disabledFont(&disabledFontSprite); - disabledFont.MapRange('A', 'M', 0, 1); - disabledFont.MapRange('N', 'Z', 0, 2); - disabledFont.MapRange('a', 'm', 0, 3); - disabledFont.MapRange('n', 'z', 0, 4); - disabledFont.MapChar(':', 10, 0); - disabledFont.MapChar('!', 11, 0); - disabledFont.MapChar('?', 12, 0); - // TODO: add '.' and '-' characters + Font disabledFont(&disabledFontSprite, 0, -2); battleRes.disabledFont = &disabledFont; SDL_Surface *handCursorImg(IMG_Load("test-data/cursor-hand.png")); diff --git a/test-data/large-font.png b/test-data/large-font.png index db06aee39c51e1101198eaf1d2ddc09230c13142..c00fe6f489d22e627bf2e0c3b1bd744c1b39ca3b 100644 GIT binary patch literal 1748 zcmZ9MdtB1@8ppp}YEf;kGi&qGNo{l1(c?_dYNdHASL)K!F%cug?4qVC3ojUmlIQf= zYdZePxRKokq`S3pt*alU$3{kTq_PZ73J86 zY=(gk0ChbW2EYfzB0!$=QSfJ@>v;fh*U?wAGiPCLZ@10!MTqeStIq6TLT0^us4!$3 ziIVkvu4U4X=Md@=F9=Fw^3CGnZmF)JWX=1>1E8xzph!}(YXyPVq+D}&(BE3|TqSOH1TjS z=7Y$9zTuf{_r)b&(|LF|EJg6E>`iqdgJxGiM37`ODPkZE} z?61au2ytA4WNFHykr*6NEe*15(_?Fx}e`fWHl z(>Af--PLdm?&b#WcvU3tB`Mch<-Zi3oZIn??^r9_`}E9;T}{rrc3W1_YMSFgV|v-D zeHt&;m91gTjulFaeGs$1B6JoesSXkN#&V5@lj5Bs+t|jDTg3!Mhsnq;3avtd>nWgZ zh(3hw``3_wezB52GGHg!E+)?0*YhWf-V6Z4>s&bxqegl`uZHIhwtjo2rcaXYy{QJo z!o5_#9uB^{AXp)P0jR-r*rHuFK0<~Qie7zey+w1#tueu<#qjh17!}!0)8ZTxIjT*^ z8jjMe+cJ$rp14K1r5Xtq>%d`N4@US#OypM&I9ctYX-w1MomdnYkAW@n-}&6Kp+IPj zSm$KK3pC&!eJl#rUb_C8P!`<50SGaj5 z$gsm``@+fRyN-F1{T}1&GB%9X|5JWf0+7g2{-VGv?!c(XHuaAeZb#~oA0g0U?DgEi z*pRlB;fDeNRA&4Uo^liL057_Rk4m~R23)w}Tr~A;Ak3{jFT~@QCgvc|%I-#<9>vh0BG6Wk%?g;7OkE{C~?`?dVaKF(6v*p=$#%KYR3Hs{VKzF=y+ z;gJ9N8jeATX1(W(m>OyL$~ph0?K8mflX56C;?{P^cbk%~EisP`-HparDMB@d1ofB> zEE2Xu=AIiPYG#CQKRZe)R*mTWow*+7zN$;_!f6K3^|A%2ZCB>;cB5H?r$;|&H>?;} z8)f>}@&$qd%@BHAW=eJV+N^C+g&s};U50X48tiPEAD^GfPgkV*wHfsg?d17$9~%=f zx=t?MlIw`ck8-$tZKIs!jYQ5`XMzg=cde~O+kK-vtpWwQFz`#NRdJ5ZKH^=05sM*H zSpuLUC3}LimKNMfr7&nT!C)MhnN2KrwxA-S#wgnP4MwB(O>8dR{1^hU4l*n$_$&+l zr78QQS-sM$)oCGH`f68g>=TDGK{G+qmEy{ZJwG&&na<*$=`(nS-bN;^QWM<#&1%wq z;!MyVTBPKWjp>PBEq^6tPtP{qA>Aa2@>AyTvG%w9Gh`4FmtJdDTU#cxGoWSqaJV1Lsyq@ym%qU|pyJ^(iM8Uak zsAquEHiPh4s@0m`)QKl$kqvh9#9L*C+YW{LoiJyhGQHYz0vq-9x3%55&f81>il8Q_ gGF3P@c-#D%&*e`KN^@TP+eIz$qm+2g!BbWL2O%|DQUCw| literal 1633 zcmV-n2A=teP)U%lm{NF_aL1Y5;YP}XOZJFNNudnZY zf9Y|xe!kJ4zjr^Yo_`4hPe`Ds79{#E(de3ES5N!A5(v~l`?sjAwNF$nI4e1FpQp4o zIqfc*1Of>ZpCG9uxU1#tZNX1iCvR^l#joq<0zh9FPQp6B8(UlyU3+ zcTX&dss@6666on;p?dpCp5Ed=_47+0IH3lL8UZjXL3{V__{T6S5A2jcvq$6B_E5L> zgpaPJTKDhx)j$9M0000GBzsT3cNUqqsMP~npS92J|J`F<>)pd0y*^Lscv3y;qvuM9 zb{!$md;Gm44qErG9|$^xkA;hx53Tj@^zOfR%v5iSo@+@*kL_CBYNNg-5R6Em*7aX< zE%T`LX?piRTWPYqw?8e3?)u(p=e3hS;1Uk}fZ&`OXmz8XTwR^oXYBv0+&uvOKrkYK zdY^e;r6ob~sDa>VHPG&}?w5{<%Z*7JRl}Wr{;$VBD~U?4xFis)lt80bzaDM&Sh(6` zydH1s+OezIWgQ_21S1k?)Gz;(ewf+G*!uj^>Z0%dj=rLjKoF5YyFJmUKWZ&ceNIUN z!H60NR;-OYkqQzhzIGYCzRWKDPo;Ar?0)>G)JhTvR!X4W`Pq8cm+4)XrnZHTZb`2# zdF}Sqk|_Fo<*roj{{AEo0000001I2DH+Yx11bX|EdgoHO>wL7HzgX+o?vUzqiMp5gkvNg(Lp2LygV zpayyrwa?zQj|74zCeW($(WRcmd}`7}ukx-20ts|q%at;^1?$~^ZVqd;&l$Ck1cDP2 zX!bR7^jN%9B1xjXlScxo-6TqFXYC}CKmY&$000~ytWRRMSy%2J5pY+(P}KKuog3n=@3r^% zQ*&C3I)42?(7{NA!;&yvISE=n zUv7KvT-c@OFY524=5MRr->%7%OWM@_-v2IvAR>XHddhPxL+Tp7wxw=u=~HtSw7x&; zyp^`BscZ7pYnIiMr%{AwxD^Q3B@s4;<2EiY>)kpzN> z1S(zE=Dj`D0+(LHr{s>~`nuZp_ioSaztwK@>PaFA1f1sM=f~Io-C@gZM*_h%TyHO& zL@hNW5(oeQ0Dw~Zd-mWi9QXl&9}xHffgcc1+?Om&%@M?(cC| zb=8Teq%BqZ_pA>DBNC{!WshoUX06Y2S4($SE%!8cCD`@-5(pv_h_-9uSv6X8B1YAq zt#`>%ub*8LruHv^Kmx7Pf?r!|HPG0aW^{t(-Y0=T0HZ`T zoRmPTjYNn#?pZD5Dm6=QKTXu#yy){PfnbFMis}iTJsSITrK65#)jqS&OKqY{AXupe z>Rlgb*Q6V|A5L+qLIK0>KGBe|>(Hw%$;ZBzL5&1cH@nAedQ0 f)z;b)2qyXmTcC8glFa8V00000NkvXXu0mjfRM1Yv diff --git a/test-data/normal-font.png b/test-data/normal-font.png index b6a286eb4e93875a037d84260e8237b536f17910..8a1532b71e4b679183ffd0079da7f2890df107b4 100644 GIT binary patch literal 1258 zcmVKryIcnIb9K{ym!@i2drz5&xtp>GPwQ-~asn^WVS! z`uo@C2Y@a3OBVp|rOX=twERDz1ON&EfC&JA2>`$|VgN_60KPv!0RS)o05Aan0001J z!YTkD1^@s60N~{@fUMno-@kL!_n$34dpF`}EaR-)taenFzq6Vde^LMd1(45Gi`y+^ar*wEofdWMv9IbuR|XzeaJ10RR910QhJ;6L1&bzsh%yX1>j4&SkaZYOEld zM^Uv`W3)b18KATMx2pfe0Du=$mIn}>;a1O})fsS6g;8yRvWbq%Dh1kAUNplryL@{A z0OTuxGt0V5CfIDI;N3IYp1vNxYJ85qkI|E*s$v31zfS=G6hPmMdp5&$ow-+Sd7|~t z&R{(I{b>L1ZuxgnSWzX?r8Fr3fCAWO2Hqu#y~?+)ZqKL>+HGmG#&b5mVb|}WsvQ&n zKmqj6c&mN2*@a#P^SR8VhCq>22rI_eVT8T&)(baJr&7iER z|5XdwJ$_Y6;HOU2qTHdJFOF9){U+?|xSz1puH=0c7898@ z>VAN%n~%C<2hnGVphHR>S6!@0002c;fq>JhZq2W$MX4qmT%<6s{Qy~`=QUu zpKW*ax#;^>_oI*Ye^>plj@#&XfC2z;z*n}VTfHBBHe+k`F1#pNcQc+nSKTjJ3JVkf zfT#l4#iCvP_pDs}T`hU^ocyfQb!YDmTy@SrC;$MX3ZQE@-YNwVwTxM34(`sZ1&=BS zzCHy2poz~_GjH{&zOxEp)(4$E4U%-pp|A1Ne2=>Z5GbDkJLG1T7sZ_PZNyaBQ0QWWE^WW#!^&dX|e%#jr zKkr%ny{ddw{YUQ`JwGc~)sE=$tNVYozg6RAt^c130L;9siZT1$t|e5Jud4s(cdPBP zT1>BUdljNv|9kt-``wP(_wz3b1fWzP6}uK&Ww})rE!sj>D^GU2s>U(8ToeePqXI?G zX}zl{vpKNJhf(_|R!h0suGN{t=snh%N7f8TwHnMS9Kgv6q}m6tD$UG-j-FTTk5&0H zs#P?v!m7qU+DAfx08UaMuVrNwt9N~~>l3}Iivj^SxUF+k^%<_!a(8_km1SCOkLskt zsb>+Z_SID5jt>L?003~V541an&hlNNd=Kl+xp(JX)s9_X$GQ&|b=GjTK2aw~to?@% z1mNJMvJkr#%KHA9#faWPw<=te1&mtNvW|IwV2p=eVZr;@g z=@OG+)iQefznjnE-QUXo9#9|vr2%q3IqTE0Pr~O)j95HuBp0D@-BIGM$fD6BUPP-KjnFR zAb>>7`GLI3Sn69{M~UwfdG^Wq`o1ldVlxwqb%OLD8Q^9 zyZcb;`j4JNfdG^WRBfrNcjBv0Qk;hM`>}q1Rt2-x9|Z!4P@pO$idL4Ws6wjeyZS=a z(Q#Btr2bw|Ab>~(TAkx}S;w!6D#Sgb*nZ4X!rk|yKmZvEWL2UpA4jc}>T;v|L0!Hz zBJC(@&}uZH>V3q~|4|?S004kvkozM~S&ho7r#DAub-Swa?s)qvtKac~035vNf*js8 z3xxL!oVVQQ_=PACfKq|f*#)foK~eGHRFPM+eJ5)@RQ>NA_bxt}wVy`qL4g323gpc( zy81h7Oarflnpt*r`_%7MwL=|gG};HLx(zV=2Gbh>BU zLxBL43N*7|PtU>G-GXQBUp#djx}9`EfdC>DNOkjc*TQ@6wPdXx?XHqp@AOys2HyHd z`8?L|FRK115P$>j?>D9TB!sHor^kpufdBvi004Bp1badFKmbQ`|7Q8F%OBs(x{4Hi z4`%kBtoF~!_qN;mJL~hRIDu95-yJs;2tdGV_b)Ws0(dQL^?e%ej(3*~dg^+sGR