* src/macfont.m: Fix compilation with USE_CT_GLYPH_INFO.

This commit is contained in:
YAMAMOTO Mitsuharu 2015-09-30 18:43:25 +09:00
parent d1fb5e6c49
commit ecbb6aeb5f

View file

@ -198,57 +198,53 @@ static void mac_font_get_glyphs_for_variants (CFDataRef, UTF32Char,
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;
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];
[layoutManager addTextContainer:textContainer];
[textContainer release];
[textStorage addLayoutManager:layoutManager];
[layoutManager release];
/* Force layout. */
(void) [layoutManager glyphRangeForTextContainer:textContainer];
/* 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];
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;
}
if (glyph < [nsFont numberOfGlyphs])
result = glyph;
}
[textStorage release];
[textStorage release];
return result;
}
return result;
}
#endif