Hi Joaquin,
> We have to position glyphs at exact positions (not extracted from > default scapements). Sure, but I am pretty sure Pango does that. > PangoGlyphString has associated to each glyph a > PangoGlyphGeometry with: > > PangoGlyphUnit width; // the logical width to use for the the > character. > PangoGlyphUnit x_offset; // horizontal offset from nominal character > position. > PangoGlyphUnit y_offset; // vertical offset from nominal character > position. > > I don't understand the comments. What's the nominal character > position? And what's the logical width? > I far as I know the logical width is the width by which you move the insertion point; it is determined by the shaping engine. I suspect that the two offsets are related to the way 0-witdth and negative-width characters are handled. If I understand correctly, when you have a string Abcd, where b,c,d, are 0-width, the total width is divided between the four glyphs, so that while the overall logical_width(Abcd) == width(A), the logical width for each of the four glyphs == width(A)/4. This makes it possible to give some indication of where the insertion point is, instead of having it stuck at the end of A for 3 key presses. Now, in order to draw the glyphs at the correct place, you need the extra x offset, which would be -width(A)/4 for b, -2*width(A)/4 for c and -3*width(A)/4 for d; but as I say I am not 100% certain about this, you would need to ask Owen. However, when we use Pango, we need not to worry about the internal data stuctures too much, since it is Pango that calculates these and then uses them to postion the glyphs when doing the rendering with pango_*_render(). The only thing we do outwith Pango is moving the insertion point, and we only need to worry about the logical widths for this. Tomas
