From ebf171b5d7cf8f3f1041a7a9a4ed52fd8814a22b Mon Sep 17 00:00:00 2001 From: sillysagiri Date: Tue, 15 Oct 2024 22:39:11 +0700 Subject: [PATCH] add Measure() into bmf --- assets/silly/bmf/{nds12.png => nds12_0.png} | Bin assets/silly/bmf/{onds12.png => onds12_0.png} | Bin raw/nds12/{nds12.png => nds12_0.png} | Bin raw/nds12/onds12.fnt | Bin 1992 -> 11234 bytes src/sillysagiri/BMF.java | 49 +++++++++++++++++- 5 files changed, 48 insertions(+), 1 deletion(-) rename assets/silly/bmf/{nds12.png => nds12_0.png} (100%) rename assets/silly/bmf/{onds12.png => onds12_0.png} (100%) rename raw/nds12/{nds12.png => nds12_0.png} (100%) diff --git a/assets/silly/bmf/nds12.png b/assets/silly/bmf/nds12_0.png similarity index 100% rename from assets/silly/bmf/nds12.png rename to assets/silly/bmf/nds12_0.png diff --git a/assets/silly/bmf/onds12.png b/assets/silly/bmf/onds12_0.png similarity index 100% rename from assets/silly/bmf/onds12.png rename to assets/silly/bmf/onds12_0.png diff --git a/raw/nds12/nds12.png b/raw/nds12/nds12_0.png similarity index 100% rename from raw/nds12/nds12.png rename to raw/nds12/nds12_0.png diff --git a/raw/nds12/onds12.fnt b/raw/nds12/onds12.fnt index a41868f97519b5317d6983bade1bdb317d086df4..6c8d74819865a2f9e1053647fea673837f29fc4f 100644 GIT binary patch literal 11234 zcmcgy%WmUF5WFw2|1j`*9guqKFsJ0;Q!Y8=7|;?e5i661B_~q8KHXhC=8VIqVU8DA zixS0RS65f}3|*8@m3hi`xxM@Sw?ER^ojDi(=Jq~K%wu)h+r$)?>{RUN#qOBBp7V>n zyEAWPv8(pEP0ji8nqPLu2b(5|IX_p`!#rEJryU4yDInRboN*B%S(Bz#0JO699->I>(TEW0MQsjL^=DtcZ`gYBO%X`fJm!e9y_WdM3jK*-qDvwc#bqH zQVun7`hivhR!3AvA0ksiy+fD@V+@ot0m)aw2F|pz6Jj z7>MDV<0DR_9BIYut1O);Q^y*f<0dPACPx!eCm%7ditO9h$ZL4cmdT|UeO4!OxwU$Z z*jyY|)pInDF=B-0pz?`T5$L3zBO3rzkDNx%V+2Haj_VyWX>OCoxM4oI9yy<3f1Jnx zHt-xw#$AX~WzBPrRMy}%@`kTe=TSzwY1hab^&BbpC=MWvk!Jw*o+u8mf#k)fb4gC>=T{9wEj+NoYfi7)zRCRK|xY2Wu%W)CYvpG@0qtt}qLLk}lIZ4olu@>JavXNBO6el4ief@m17GdZ>IX!S z+<{2x;yiMqA}NPdT0ejES;f6NR)vISR^_9b)gE7!ZO(eK^6L@uRKyXUgHzjC<=Q7! zwH|%MpgKk%_IVCVf~F2Rje3V%d0Nlm(yw>s{X7OSexU>Kjw<^q>m;m>$q)&O){jzC z;XZlbt0VH*=c_#T6QZyd2~j*pHg-R-8pNo7OV#M)A3UcwM)91vlzSwtQiiB^xID(F z4$5Ht7eO)Vkw+>*l-T01%8vm_tBM%I0cPSk^4Np48iiHy9O>{}9a5L@)v!8-cdNeY z;K_!bl}l3#T@HP2e1AlFws$LDtJ0h!CK_i3;66ojjyiz9whEjaR1KN|kd2NQ#dBO9 a@f&%>Fy&a4TWUtc6W90kBMk9>i2ni3cIIyY literal 1992 zcmZ9NX;TwH5QaPC=5Q(X17MXRiXaFiK{-_-L_`EcK;=-02m&e)MFl+hY5pod8lT=Q z)NDh|*7lQkr{C_KnH`-Tk4Dam$lvlGS(gZR5{X1+3iH{VRCz?TQX|Kb*Pry)XdRcm z-Sz!!ZZ*?g+TE1caZ;oix*+`$m#F+JS92BbGVBK<$_)B&4A#P3hYX^NNx58MS77ao zG&*G|bXSQBjAXzPuvX%WMt6-k$4CV_taxq2d2&R9991x#|D3dvw~|A>T!+<3TZnbQ zX5=bf(s-%zy>!Ahq#G|uSX9)@4OkyJVt$S^SMj=F1z3{I<#OEDb;FkFOO$`DP<1`r zwUR@m%y9d1i+I53`e1p(`e74>4Zt#n z4Z;=;8-g847uE76xN5!Xqe%Z^+D%v-cAL9>SUl*d>h8dr{Qkx1U(D~zUD%G%jlf3e zRwC$&&Xq)au-ns7*gC^yW5h2ED-bUjcAt3M_83+#jUnAE>@&ml{DipH zXSKdRU8i%zDe*$OdDwvQti9VZo}a>shCPGL8ulEf^|@XaiAf(~OOOu?SGP>OZM>|& zI)nXoa^~p!ZZv!Fr9W5rJa`4muqNH}Y85s`#g%=Y_Sb0M0ls-y@pLn54zOp zdR~Jy@b7wl13ScvtJ5{wY;+s2YUvH>-on;Qy_>L-KcAjqm3_1Y%b5ALVUy^h%&KRd zuD^G%OF>_h>ArjqJ1{x4?|tY_&L*vQ2PXJS2lcYsy4 q_|CZJm3|jTc-GzfKVj3R&%aHN3_g3a>E8c&G+zvAU diff --git a/src/sillysagiri/BMF.java b/src/sillysagiri/BMF.java index ea87b92..f0ee47a 100644 --- a/src/sillysagiri/BMF.java +++ b/src/sillysagiri/BMF.java @@ -126,6 +126,53 @@ public class BMF { } } + // TODO: handle multiline + public short[] Measure(String str) + { + short left = 0; + short right = 0; + short top = 0; + short bottom = 0; + short[] cursor = new short[]{0, 0}; + boolean isFirst = true; + + for (int i=0; i 127)) index = 127; + + if (index == '\n') + { + isFirst = true; + cursor[1] += lineHeight; + cursor[0] = 0; + continue; + } + + short[] ch = chars[index-32]; + int[] offset = new int[]{ch[XOFF]+cursor[0], ch[YOFF]+cursor[1]}; + + // check first XOFF + if (isFirst) + { + left = (short)Math.min(ch[XOFF], left); + isFirst = false; + } + + right = (short)Math.max(right, offset[0]+ch[WIDTH]); + top = (short)Math.min(top, offset[1]); + bottom = (short)Math.max(bottom, offset[1]+ch[HEIGHT]); + + cursor[0] += ch[XADV]; + } + + return new short[]{ + (short)(right+Math.abs(left)), // x + (short)(bottom+Math.abs(top)), // y + left, top // xoff, yoff + }; + } + public void Draw(Graphics g, String str, int x, int y) { short[] cursor = new short[]{0, 0}; @@ -148,7 +195,7 @@ public class BMF { img, ch[X], ch[Y], ch[WIDTH], ch[HEIGHT], Sprite.TRANS_NONE, - x+offset[0], y+offset[1], + offset[0], offset[1], Graphics.TOP | Graphics.LEFT); cursor[0] += ch[XADV];