Around 10 o'clock on Jun 20, Dmitry Karasik wrote: > - The font/glyph data information, located in XftFont/XGlyphInfo > is somewhat cryptic. For example, what are x,y,xOff,yOff fields for? > I guess these are related to lbearing/rbearing etc in XCharStruct, > but how? Yes, they're mystic and broken. I'm sure I had a good reason for changing the names and semantics of these fields, but I sure can't think of what that might have been. x,y are the distance from the upper left corner of the bounding box containing the glyphs to the glyph origin. xOff,yOff are the distance from the glyph origin to the next glyph origin width,height are the dimensions of the bounding box. Note that 'x,y' are *not* the distance from the glyph origin to the upper left corner of the bounding box, so instead of *adding* x,y to the glyph origin, you *subtract* it. Render/Xft Core X ------------------------------- x leftSideBearing y -ascent xOff width yOff (not defined in X) width rightSideBearing - leftSideBearing height ascent + descent (I sure hope this is right). > - I need to access the font/glyph information like underline position, > underline thickness, average character width, etc. Under the core > protocol, these could be read via the corresponding font properties - > XA_UNDERLINE_POSITION,XA_UNDERLINE_THICKNESS, and so on. How would I > access these data from under Xft? You ask FreeType directly. Use XftLockFace/XftUnlockFace to get at the FT_Face object. > - How does UCS4 endianness work for Xft? For example, if I try to > output the glyphs, corresponding to the font charset, the glyphs are > not shown up unless I reverse the byte order. Do I have to always > reverse the byte order or only for little-endian machines? Xft provides three separate APIs for UCS4 strings: XftTextRender32 - native machine byte order XftTextRender32BE - big endian byte order XftTextRender32LE - little endian byte order I note that Xft is missing TextExtents varients for BE/LE and uses the FcEndian value for Utf16 tet. Sigh. I suggest that we create UCS4 APIs which use FcEndian values and FcChar8* strings with 4 bytes per character. -keith