On Tue, May 28, 2019 at 11:44 AM Eli Zaretskii <e...@gnu.org> wrote: > > From: Behdad Esfahbod <beh...@behdad.org> > > Date: Mon, 27 May 2019 21:21:10 -0400 > > Cc: "harfbuzz@lists.freedesktop.org" <harfbuzz@lists.freedesktop.org> > > > > control those units (if they are under the client program's control). > > > > They are controlled mainly using hb_font_set_scale(). > > > > In particular, I get a huge value of x_advance for the letter U+05EA > > HEBREW LETTER TAV when it is followed by U+05BB HEBREW POINT QUBUTS. > > The value of x_advance I get is 1229, which is too large even after > > dividing by 64 (which, btw, I still am not sure is TRT in my case, > > > > FreeType works in 26.6 fixed-point, ie. 64 units per 1.0. That's where > the 64 value comes from. And you > > don't see it in your code because hb_ft_font_create* sets that on > hb_font for you. > > > > In your Windows code, you should call hb_font_set_scale(). I believe > right now you are *not* calling, and you > > get values in the face's UPEM. That's the default scale for fonts. You > can get the face UPEM using > > hb_face_get_upem(). > > OK, I figured out how to scale the units from UPEM to pixels for a > given font size, and now I see reasonable results after such scaling. > > However, I think something is still amiss, because I still don't > understand how to determine the values with which to call > hb_font_set_scale. Say I call it with an integer value N, what will > that produce in terms of values of hb_glyph_position_t? Will the > values there be in the 0..N range, where N means the full height of > the em box? If so, how would I then convert those values to pixels -- > this conversion will need the font size as well, right? And if so, I > might well leave the values in UPEM units, and convert them to pixels > by hand. I feel that I'm still missing something, since you said "you > should call hb_font_set_scale". So presumably if I call that > function, conversion to pixels will somehow become easier? >
You pick what value you want to represent one pixel as. Say, you choose 1024. Then if you want to render at "16px" font size, you set scale to 16*1024. That's all. -- behdad http://behdad.org/
_______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz