From: YAMAMOTO Mitsuharu Date: Wed, 30 Sep 2015 09:43:25 +0000 (+0900) Subject: * src/macfont.m: Fix compilation with USE_CT_GLYPH_INFO. X-Git-Tag: emacs-25.0.90~1223^2~58 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ecbb6aeb5f10e0ca4ba404570ee36961273fc139;p=emacs.git * src/macfont.m: Fix compilation with USE_CT_GLYPH_INFO. --- diff --git a/src/macfont.m b/src/macfont.m index 97a255bf018..69640766d4e 100644 --- a/src/macfont.m +++ b/src/macfont.m @@ -198,57 +198,53 @@ mac_screen_font_get_advance_width_for_glyph (ScreenFontRef font, CGGlyph glyph) return advancement.width; } +#if !USE_CT_GLYPH_INFO static CGGlyph mac_font_get_glyph_for_cid (CTFontRef font, CTCharacterCollection collection, CGFontIndex cid) { -#if USE_CT_GLYPH_INFO - return mac_ctfont_get_glyph_for_cid ((CTFontRef) font, collection, cid); -#else - { - CGGlyph result = kCGFontIndexInvalid; - NSFont *nsFont = (NSFont *) font; - unichar characters[] = {0xfffd}; - NSString *string = - [NSString stringWithCharacters:characters - length:ARRAYELTS (characters)]; - NSGlyphInfo *glyphInfo = - [NSGlyphInfo glyphInfoWithCharacterIdentifier:cid - collection:collection - baseString:string]; - NSDictionary *attributes = - [NSDictionary dictionaryWithObjectsAndKeys:nsFont,NSFontAttributeName, - glyphInfo,NSGlyphInfoAttributeName,nil]; - NSTextStorage *textStorage = - [[NSTextStorage alloc] initWithString:string - attributes:attributes]; - NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; - NSTextContainer *textContainer = [[NSTextContainer alloc] init]; - NSFont *fontInTextStorage; - - [layoutManager addTextContainer:textContainer]; - [textContainer release]; - [textStorage addLayoutManager:layoutManager]; - [layoutManager release]; - - /* Force layout. */ - (void) [layoutManager glyphRangeForTextContainer:textContainer]; - - fontInTextStorage = [textStorage attribute:NSFontAttributeName atIndex:0 - effectiveRange:NULL]; - if (fontInTextStorage == nsFont - || [[fontInTextStorage fontName] isEqualToString:[nsFont fontName]]) - { - NSGlyph glyph = [layoutManager glyphAtIndex:0]; + CGGlyph result = kCGFontIndexInvalid; + NSFont *nsFont = (NSFont *) font; + unichar characters[] = {0xfffd}; + NSString *string = + [NSString stringWithCharacters:characters + length:ARRAYELTS (characters)]; + NSGlyphInfo *glyphInfo = + [NSGlyphInfo glyphInfoWithCharacterIdentifier:cid + collection:collection + baseString:string]; + NSDictionary *attributes = + [NSDictionary dictionaryWithObjectsAndKeys:nsFont,NSFontAttributeName, + glyphInfo,NSGlyphInfoAttributeName,nil]; + NSTextStorage *textStorage = + [[NSTextStorage alloc] initWithString:string + attributes:attributes]; + NSLayoutManager *layoutManager = [[NSLayoutManager alloc] init]; + NSTextContainer *textContainer = [[NSTextContainer alloc] init]; + NSFont *fontInTextStorage; - if (glyph < [nsFont numberOfGlyphs]) - result = glyph; - } + [layoutManager addTextContainer:textContainer]; + [textContainer release]; + [textStorage addLayoutManager:layoutManager]; + [layoutManager release]; - [textStorage release]; + /* Force layout. */ + (void) [layoutManager glyphRangeForTextContainer:textContainer]; - return result; - } + fontInTextStorage = [textStorage attribute:NSFontAttributeName atIndex:0 + effectiveRange:NULL]; + if (fontInTextStorage == nsFont + || [[fontInTextStorage fontName] isEqualToString:[nsFont fontName]]) + { + NSGlyph glyph = [layoutManager glyphAtIndex:0]; + + if (glyph < [nsFont numberOfGlyphs]) + result = glyph; + } + + [textStorage release]; + + return result; } #endif