Yes it does work, but there is still no way to get the descender. The FT_GlyphRec already has some of the FT_Glyph_Metrics information in the form of the advance. Why doesn't the FT_GlyphRec contain the remaining information? Memory concerns? Performance?
Thanks again for help and suggestions. Michael On Wed, Sep 29, 2010 at 9:50 AM, Michael Plitkins <mplitk...@nestlabs.com> wrote: > Thanks. This may well get me moving forward. I do indeed need to > measure the horiBearingY because I am trying to line up type of > different sizes to get the presentation that we need. Measuring a few > sample characters will be adequate. Using the rendered bitmap still > won't give me a way to calculate the descender though (all I will know > is the actual full height of the rendered glyph). > > I knew that the FT_Load_Glyph(), was bogus, but it was my last ditch attempt. > > Using FTC_CMapCache_Lookup() is on list my too. > > Many thanks and I will report how this turns out. > > Michael > > On Wed, Sep 29, 2010 at 8:34 AM, Brady Duga <d...@ljug.com> wrote: >> Well, I am not entirely sure what you want to do. Using horiBearingY as the >> ascender seems weird - do you really want to use glyph metrics for line >> metrics? Or do you really need the ascender/descender info for every glyph? >> In any case, you shouldn't be calling FT_Load_Glyph when using the cache >> system. Instead, you let the cache subsytem make that call using the load >> flags you supply to FTC_ImageCache_LookupScaler(). That gives you an >> FT_Glyph which you can use for basic glyph metrics. Specifically the >> "advance" vector of that struct tells you how far to move to account for >> this glyph. In a more interesting case, you would pass FT_LOAD_RENDER to the >> cache subsystem, which should make the returned glyph be an FT_BitmapGlyph. >> That in turn gives you the left/top coordinates for the actual bitmap, plus >> an FT_Bitmap struct you can use for more information. Once you have the top >> and left values, you can essentially calculate the horibearingX/Y, though >> you may not need to bother. The nice thing about using the cache is, in most >> cases rendering is fast (already cached). It's only a problem if you plan to >> measure a *lot* of glyphs that you don't plan to render. Of course, in that >> case there isn't much point in using the cache at all. >> You might also want to consider caching the char map >> using FTC_CMapCache_Lookup instead of FT_Get_Char_Index. >> --Brady >> >> >> On Sep 28, 2010, at 11:30 PM, Werner LEMBERG wrote: >> >> Please help this guy. >> >> >> Werner >> >> From: Michael Plitkins <mplitk...@nestlabs.com> >> Date: September 28, 2010 9:50:48 PM PDT >> To: w...@gnu.org >> Subject: freetype cache and glyph metrics >> >> >> Hello Werner, >> >> I have been using freetype for some time and have come to my first >> stumbling block: When using the image and font face caches, how can I >> get the the full metrics of a glyph (metrics.horiBearingY, etc.)? It >> seems that information is only available from the FT_GlyphSlotRec in >> the face itself. When using the cache APIs all of my attempts to get >> at the FT_Glyph_Metrics have yielded inconsistent results. Here is one >> of my latest attempts: >> >> void nlGfxContext :: GetGlyphMetrics(nlULONG aHeight, char aGlyph, >> nlFontMetrics *aOutMetrics) >> { >> if ((mFont != NULL) && (aOutMetrics != NULL)) >> { >> FT_Face font; >> FTC_ScalerRec scaler; >> >> scaler.face_id = mFont; >> scaler.width = 0; >> scaler.height = aHeight; >> scaler.pixel = 1; >> scaler.x_res = 0; >> scaler.y_res = 0; >> >> font = mGlobals->LookupFontID(mFont); >> >> if (font != NULL) >> { >> FTC_ImageCache icache = mGlobals->GetFontImageCache(); >> FT_Glyph glyph; >> FTC_Node node; >> FT_UInt charidx = FT_Get_Char_Index(font, aGlyph); >> FT_Error err; >> >> err = FTC_ImageCache_LookupScaler(icache, &scaler, >> FT_LOAD_DEFAULT, charidx, &glyph, &node); >> >> FT_Load_Glyph(font, charidx, FT_LOAD_DEFAULT); >> >> if (err == FT_Err_Ok) >> { >> aOutMetrics->mHeight = font->glyph->metrics.height >> 6; >> aOutMetrics->mAscender = font->glyph->metrics.horiBearingY >> >> 6; >> aOutMetrics->mDescender = -(aOutMetrics->mHeight - >> aOutMetrics->mAscender); >> aOutMetrics->mMaxAdvance = >> font->glyph->metrics.horiAdvance >> 6; >> >> FTC_Node_Unref(node, mGlobals->GetFontCacheManager()); >> } >> } >> } >> } >> >> This is my horrible attempt to use the image cache scaler to get the >> glyph that i want at the size that i want and somehow get the glyph >> metrics to be set as i want as part of the FT_Load_Glyph(). It seems >> like it shouldn't work and it doesn't. >> >> How does one get the metrics for an individual glyph and use the >> caching subsystems at the same time? >> >> I apologize in advance if this has been answered somewhere out on the >> internet, but I was unable to find it. >> >> Many thanks. >> >> Michael Plitkins >> >> >> _______________________________________________ >> Freetype mailing list >> Freetype@nongnu.org >> http://lists.nongnu.org/mailman/listinfo/freetype >> >> > _______________________________________________ Freetype mailing list Freetype@nongnu.org http://lists.nongnu.org/mailman/listinfo/freetype