From 052eeb5a18e2bc1043d27dbfb1cd29e8f5d39fb5 Mon Sep 17 00:00:00 2001 From: treeform <starplant@gmail.com> Date: Fri, 1 Oct 2021 10:53:56 -0700 Subject: [PATCH] Fix tofu advance. --- src/pixie/fonts.nim | 5 +++-- tests/fonts/diffs/tofu_advance.png | Bin 0 -> 4790 bytes tests/fonts/masters/tofu_advance.png | Bin 0 -> 2805 bytes tests/fonts/rendered/tofu_advance.png | Bin 0 -> 5728 bytes tests/test_fonts.nim | 10 ++++++++++ 5 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 tests/fonts/diffs/tofu_advance.png create mode 100644 tests/fonts/masters/tofu_advance.png create mode 100644 tests/fonts/rendered/tofu_advance.png diff --git a/src/pixie/fonts.nim b/src/pixie/fonts.nim index 648f964..0b42065 100644 --- a/src/pixie/fonts.nim +++ b/src/pixie/fonts.nim @@ -143,9 +143,10 @@ proc getGlyphPath*( proc getAdvance*(typeface: Typeface, rune: Rune): float32 {.inline, raises: [].} = ## The advance for the rune in pixels. - let typeface2 = typeface.fallbackTypeface(rune) + var typeface2 = typeface.fallbackTypeface(rune) if typeface2 == nil: - return + # Get tofu advance, see tofu_advance test. + typeface2 = typeface if typeface2.opentype != nil: result = typeface2.opentype.getAdvance(rune) diff --git a/tests/fonts/diffs/tofu_advance.png b/tests/fonts/diffs/tofu_advance.png new file mode 100644 index 0000000000000000000000000000000000000000..2b30fd23ec3e855a8213c2a59d46a6e66f67d590 GIT binary patch literal 4790 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 YWNoWg;)~pM%6Sw3aa&)rOx-5xU;Yp4&j0`b literal 0 HcmV?d00001 diff --git a/tests/fonts/masters/tofu_advance.png b/tests/fonts/masters/tofu_advance.png new file mode 100644 index 0000000000000000000000000000000000000000..adee2e33fd9fcaa460a16cff92659a2918d81864 GIT binary patch literal 2805 zcmeHJ`!^fd7CtFzs$*(8*UV6_KHOH(R$EmfUQ>!HLlQ>3rbV?Pv`GmfYF_Q!*0UW! z6>XQw5JZa*iO|ke2u<1|@yMfwG$q6%Lqt4odhZ``f4S?defB=zUhAB_&syKw-@m>M zJZorRY5)K*^z%Iv0)UQ{HjevbyLQhGMigk>j;p@mH~@Bj@zEgQ{)4ZzAOsh3)(bRp z&8D>n-2~6`o&Y>8*tvc|4*-MPerG%p>5w_mT+u&}d$zv|mv2ygfX_pp9IaVtqmMqv zC+7^%t|lXh(Q_8gY1!^p4TFp?b5__1kdBIDgO&*$<8?Td`oq2E215Wm^s6x1w_HB= z03auMvu)y`g?sk;^8}|9u~{?#3$@M;+ozfW0|VVwXE!%A<>PHBDFD2K<Kj^sn;R<0 zE4hH`<i5E&`TovP)<{<U7=J{>z#nvX|BawhRCL`~U6^=3+MKWlfK`Mc<bd%~KO%Q) zUCC2&vbLQ$teQrh9G<)E$KRMHSKU<EoTX`=?)Ip3%~*Oa>x{6-*37jjRY#+l?XRzK zmn1}$Xu(aI+_vn1&3@L||G-wv$>>w}Eq4{jjkP5?=oTXQF{~^){r7qSi+8G~!))#? zEuER6ywn_28&_3XnVcW|!n2~JYjX|#NxJ5;`R)EnTe1IYuY*vvYyhr`3?bDW?s-p; z`|z{#Li!0rHhTqW!WB*F@3Q!`*d=zq*zdz3XZIZkV2lC?=w@mA@w|9AAZt@CD_`4u z-F&L{yDsWn<Fb<Ho}$I7_7<KF1i-BMr_a2CtUG$XKF~dsev=-LrW2FqM~2f2bn}@( zpf4rpT<;i(oaopmab#1t&m*lcZ4uH^RHG>67eNY3eMy!r7sj**8-AuS`Lp=OfmSgK zwF<!H2lnl$^3a+OFa~~JJbFYmFR>(vLdD$Z&dgL+vWA1-W#L*H*+t6u`@<W335>XQ zJ&k~ihr(d6nD=!fw75^>IZwx|rO73t&=<FEY%Q`ap@LV7T{szcc9G{$>2k__ec_LV zjFr~72xm(YgQ!^{RLM$%D#&ADEK7<KQSw&^y=1CAN#~EL4!B_G{&7hs0iV{1Iw;ix z-*^7hk`u@Dz4VY%As3$KMoDu|^i?Qgvei;Ad`&aAO_B{|^312NpXErB-0}4{wl-7~ z4B{)JRO2bU6feW`OG`1QzjosxSn$bfD2X<op=ww$n`+LLkB0IO3i{K~b?@jT5)J(w z^yO7IUN*&Xzh+}iPQCTRSU8J2c`ATQ!%EF+%14J%?_pDZ`ZEsg%ZZwd$3{t!U2U9V z2cJm=8dIi>kZTgJ^v{N>%a8Nk_-_MOJ<m-~9k;hCFJp+*c+s$>#JS*Az)s)d3lYwd z!UV-yfvU~<?U#k9Mp&SlSpG}s<GZ-x__wCVqK~i-G<-E2ax67zhM_HNESol1hlAo3 zl;Jqx#n-f)fnquhHhg?ATIXZ4`Vzs@0UBH2i*XY0hnC^&i!*Coy<1wIFqNb40rnO# zs|32mO+pnh#?Zsfu8E>hl>QQ8QE1Y21pgQ(b89dv;#c04gyFYjm7=0liuWPe_d--5 zt}wQ>Iv-bj!7es<OzKZ7|1x(y%0-16&ufVbD5j%OHI<Lv(sEkalxpMs?8ct--!R{q zpj@79wB+YftJYk{MtikXJx$nUg$W})UCT=3NS@5SjC|?1cgn@khiX$q-X25V6FPwW zbsVyW8#D=XqB&!FO{&N<Z-<VA9X>RWO6{Ou{IYe8h>Q2nNZdm9%(xAw>7%6#SN(rd zX#+c~9NMDi+Fsl_IHCh)*<yCiEW>&qo{KAi;-A4k53qJ5t_u*C3xbikWG|$bcfPmi zmE}=*@l@0#nxrMQlCuIQr7`_ri%?IjU@_>}<(OgYv#G}d?wADX7$H!~cs$8bm?6v1 z3eC2MfMfFy2Nx9IbnvIH4A!pKctsljZJNZqF4!2UejFXeUHX)?*3hudN8E%zveYk3 zGZk4g@&&>i)#35TbKd+uwZC+8UqfUGQqw-5rly{-dErgc2k#~$)nK;?uQ2(W+Cnn6 z{B|;Ies7ia&ylyno5rAvj2`o9N@#xn-X2!<6R9BP25~;zVpw#gkr0-DBahv?WNefo zY`-SP7M9hoT(Nv))!>ZIpGd`A(*Ymm4sG+T-W?H@v(NZ1#9R31K`+}nJ~MBw>lU1B z!6iQEZNG!iSan%5SX9WoqcP^i%Md}6?!ChV&OMLQjYCIMaUJz*opbGlt#xQ5C$p>( zx#LI-ak)4-9DuK`pM=EKZ)2ClWM_!aZk6izLc5_S2=;n~*LnV{rud>d&O+nC8fw`u zcE-via!1s#q!uze_fADm$TfSs6TTsSA|w4d^o6)NnNtyat<31DJlqa|0BG+?rsnSL z*bdFWt2*P1ktj2Q<wl|?{6se^pPgP)m&UK5wf^3k=8?_`j-rm)pi8{OAz?Ll0y>$Y z8UjV{QoY5gQvPk4aZN>Vl47i{WAyC#oY$tjUOmw566TUqjV<F~6@LfiE%qj)CTxx{ zV(ek_arKAAZ?@-Ug~|m37aHnvsc!-W5jw51ntDvcz8+10H>^Pq?Zt~nl+{s2(j_MS zArrNR&uri@OegV2LM@ppV;-n(nW(Frsr<G%%?JuWN|YLe6mt;2!za#JA8*)K>q^`8 z2>Kq}<^MpJp$EzcO)&(!5OrfLiMQltthm02iWM%M45R558rY5|kouiDwweIF>{?@a z>;d0^sQr#U``M=i!7xM<a@YBQtDI*@#rpZ~UKw1@A9~^72shCVev-w#Y&pN7*-kso zn98D=asRodS(=v<V_<rEx@ll2S+2x9xr!YhO}2+qG17%3f{bu2=A3jI6X9pc`Au?S zSxx(kks09}c#fSEVPlyeL||g=D&2^gEXDm;++<JQaQyhqA4YK}+juMYdo?y_QW?W1 zM6v$fc{JL5t2ULqqM8||D2Y-h9nd89+iZ5;?KpB8E6co6e@5}GtTBz$2XET4#k4(a z37vAP*1M?ilWIaIEfN!j-%xfyu<K~o{=GE@m4ngy9rNS!R<6jx6VB5q=&t~fn<D}J zSITaW|A>eB1ONd!l&Q<)i6~poYC}k;?G}8}KA+g_3P2>k^)oBDC^j=q-@x8nt2(%? zb3bY&Pb4fX(^RWM-evw*p6D6@@Nf@A7l02w+Ur2a|Ka5S!JlmI65hXL8)2>?Yn3DL N^A0@I==J@N{{{^?Gn4=T literal 0 HcmV?d00001 diff --git a/tests/fonts/rendered/tofu_advance.png b/tests/fonts/rendered/tofu_advance.png new file mode 100644 index 0000000000000000000000000000000000000000..a1deb57338b997cba10a5f5e60e4ec9500829731 GIT binary patch literal 5728 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 K%B6}{q5lPrM80PL literal 0 HcmV?d00001 diff --git a/tests/test_fonts.nim b/tests/test_fonts.nim index c54150d..6b78f7c 100644 --- a/tests/test_fonts.nim +++ b/tests/test_fonts.nim @@ -1091,3 +1091,13 @@ block: image.fillText(font, "Grumpy ウィザード make 有毒な醸造 for the 悪い女王 and Jack.") doDiff(image, "fallback2") + +block: + var font = readFont("tests/fonts/Inter-Regular.ttf") + + font.size = 26 + let image = newImage(800, 100) + image.fill(rgba(255, 255, 255, 255)) + image.fillText(font, "This[]Advance!") + + doDiff(image, "tofu_advance")