OLD | NEW |
1 /* | 1 /* |
2 * This file is part of the internal font implementation. | 2 * This file is part of the internal font implementation. |
3 * | 3 * |
4 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. | 4 * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved. |
5 * Copyright (c) 2010 Google Inc. All rights reserved. | 5 * Copyright (c) 2010 Google Inc. All rights reserved. |
6 * | 6 * |
7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
(...skipping 10 matching lines...) Expand all Loading... |
21 * | 21 * |
22 */ | 22 */ |
23 | 23 |
24 #import "config.h" | 24 #import "config.h" |
25 #import "core/platform/graphics/FontPlatformData.h" | 25 #import "core/platform/graphics/FontPlatformData.h" |
26 | 26 |
27 #import <AppKit/NSFont.h> | 27 #import <AppKit/NSFont.h> |
28 #import <AvailabilityMacros.h> | 28 #import <AvailabilityMacros.h> |
29 #import <wtf/text/WTFString.h> | 29 #import <wtf/text/WTFString.h> |
30 | 30 |
31 #if OS(DARWIN) | 31 #if OS(MACOSX) |
32 #import "core/platform/graphics/harfbuzz/HarfBuzzFace.h" | 32 #import "core/platform/graphics/harfbuzz/HarfBuzzFace.h" |
33 #endif | 33 #endif |
34 | 34 |
35 namespace WebCore { | 35 namespace WebCore { |
36 | 36 |
37 // These CoreText Text Spacing feature selectors are not defined in CoreText. | 37 // These CoreText Text Spacing feature selectors are not defined in CoreText. |
38 enum TextSpacingCTFeatureSelector { TextSpacingProportional, TextSpacingFullWidt
h, TextSpacingHalfWidth, TextSpacingThirdWidth, TextSpacingQuarterWidth }; | 38 enum TextSpacingCTFeatureSelector { TextSpacingProportional, TextSpacingFullWidt
h, TextSpacingHalfWidth, TextSpacingThirdWidth, TextSpacingQuarterWidth }; |
39 | 39 |
40 FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool isPrinterFon
t, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontW
idthVariant widthVariant) | 40 FontPlatformData::FontPlatformData(NSFont *nsFont, float size, bool isPrinterFon
t, bool syntheticBold, bool syntheticOblique, FontOrientation orientation, FontW
idthVariant widthVariant) |
41 : m_syntheticBold(syntheticBold) | 41 : m_syntheticBold(syntheticBold) |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
77 CFRelease(m_font); | 77 CFRelease(m_font); |
78 } | 78 } |
79 | 79 |
80 void FontPlatformData::platformDataInit(const FontPlatformData& f) | 80 void FontPlatformData::platformDataInit(const FontPlatformData& f) |
81 { | 81 { |
82 m_font = f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1) ? [f.m_font
retain] : f.m_font; | 82 m_font = f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1) ? [f.m_font
retain] : f.m_font; |
83 | 83 |
84 m_cgFont = f.m_cgFont; | 84 m_cgFont = f.m_cgFont; |
85 m_CTFont = f.m_CTFont; | 85 m_CTFont = f.m_CTFont; |
86 | 86 |
87 #if OS(DARWIN) | 87 #if OS(MACOSX) |
88 m_inMemoryFont = f.m_inMemoryFont; | 88 m_inMemoryFont = f.m_inMemoryFont; |
89 m_harfBuzzFace = f.m_harfBuzzFace; | 89 m_harfBuzzFace = f.m_harfBuzzFace; |
90 #endif | 90 #endif |
91 } | 91 } |
92 | 92 |
93 const FontPlatformData& FontPlatformData::platformDataAssign(const FontPlatformD
ata& f) | 93 const FontPlatformData& FontPlatformData::platformDataAssign(const FontPlatformD
ata& f) |
94 { | 94 { |
95 m_cgFont = f.m_cgFont; | 95 m_cgFont = f.m_cgFont; |
96 if (m_font == f.m_font) | 96 if (m_font == f.m_font) |
97 return *this; | 97 return *this; |
98 if (f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1)) | 98 if (f.m_font && f.m_font != reinterpret_cast<NSFont *>(-1)) |
99 CFRetain(f.m_font); | 99 CFRetain(f.m_font); |
100 if (m_font && m_font != reinterpret_cast<NSFont *>(-1)) | 100 if (m_font && m_font != reinterpret_cast<NSFont *>(-1)) |
101 CFRelease(m_font); | 101 CFRelease(m_font); |
102 m_font = f.m_font; | 102 m_font = f.m_font; |
103 m_CTFont = f.m_CTFont; | 103 m_CTFont = f.m_CTFont; |
104 #if OS(DARWIN) | 104 #if OS(MACOSX) |
105 m_inMemoryFont = f.m_inMemoryFont; | 105 m_inMemoryFont = f.m_inMemoryFont; |
106 m_harfBuzzFace = f.m_harfBuzzFace; | 106 m_harfBuzzFace = f.m_harfBuzzFace; |
107 #endif | 107 #endif |
108 return *this; | 108 return *this; |
109 } | 109 } |
110 | 110 |
111 bool FontPlatformData::platformIsEqual(const FontPlatformData& other) const | 111 bool FontPlatformData::platformIsEqual(const FontPlatformData& other) const |
112 { | 112 { |
113 if (m_font || other.m_font) | 113 if (m_font || other.m_font) |
114 return m_font == other.m_font; | 114 return m_font == other.m_font; |
(...skipping 11 matching lines...) Expand all Loading... |
126 CFRetain(font); | 126 CFRetain(font); |
127 if (m_font) | 127 if (m_font) |
128 CFRelease(m_font); | 128 CFRelease(m_font); |
129 m_font = font; | 129 m_font = font; |
130 m_size = [font pointSize]; | 130 m_size = [font pointSize]; |
131 | 131 |
132 CGFontRef cgFont = 0; | 132 CGFontRef cgFont = 0; |
133 NSFont* loadedFont = 0; | 133 NSFont* loadedFont = 0; |
134 loadFont(m_font, m_size, loadedFont, cgFont); | 134 loadFont(m_font, m_size, loadedFont, cgFont); |
135 | 135 |
136 #if OS(DARWIN) | 136 #if OS(MACOSX) |
137 // If loadFont replaced m_font with a fallback font, then release the | 137 // If loadFont replaced m_font with a fallback font, then release the |
138 // previous font to counter the retain above. Then retain the new font. | 138 // previous font to counter the retain above. Then retain the new font. |
139 if (loadedFont != m_font) { | 139 if (loadedFont != m_font) { |
140 CFRelease(m_font); | 140 CFRelease(m_font); |
141 CFRetain(loadedFont); | 141 CFRetain(loadedFont); |
142 m_font = loadedFont; | 142 m_font = loadedFont; |
143 } | 143 } |
144 #endif | 144 #endif |
145 | 145 |
146 m_cgFont.adoptCF(cgFont); | 146 m_cgFont.adoptCF(cgFont); |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
271 RetainPtr<CTFontDescriptorRef> newDescriptor(AdoptCF, CTFontDescriptorCr
eateCopyWithFeature(sourceDescriptor.get(), featureType.get(), featureSelector.g
et())); | 271 RetainPtr<CTFontDescriptorRef> newDescriptor(AdoptCF, CTFontDescriptorCr
eateCopyWithFeature(sourceDescriptor.get(), featureType.get(), featureSelector.g
et())); |
272 RetainPtr<CTFontRef> newFont(AdoptCF, CTFontCreateWithFontDescriptor(new
Descriptor.get(), m_size, 0)); | 272 RetainPtr<CTFontRef> newFont(AdoptCF, CTFontCreateWithFontDescriptor(new
Descriptor.get(), m_size, 0)); |
273 | 273 |
274 if (newFont) | 274 if (newFont) |
275 m_CTFont = newFont; | 275 m_CTFont = newFont; |
276 } | 276 } |
277 | 277 |
278 return m_CTFont.get(); | 278 return m_CTFont.get(); |
279 } | 279 } |
280 | 280 |
281 #if OS(DARWIN) | 281 #if OS(MACOSX) |
282 static bool isAATFont(CTFontRef ctFont) | 282 static bool isAATFont(CTFontRef ctFont) |
283 { | 283 { |
284 CFDataRef table = CTFontCopyTable(ctFont, kCTFontTableMort, 0); | 284 CFDataRef table = CTFontCopyTable(ctFont, kCTFontTableMort, 0); |
285 if (table) { | 285 if (table) { |
286 CFRelease(table); | 286 CFRelease(table); |
287 return true; | 287 return true; |
288 } | 288 } |
289 table = CTFontCopyTable(ctFont, kCTFontTableMorx, 0); | 289 table = CTFontCopyTable(ctFont, kCTFontTableMorx, 0); |
290 if (table) { | 290 if (table) { |
291 CFRelease(table); | 291 CFRelease(table); |
(...skipping 20 matching lines...) Expand all Loading... |
312 #ifndef NDEBUG | 312 #ifndef NDEBUG |
313 String FontPlatformData::description() const | 313 String FontPlatformData::description() const |
314 { | 314 { |
315 RetainPtr<CFStringRef> cgFontDescription(AdoptCF, CFCopyDescription(cgFont()
)); | 315 RetainPtr<CFStringRef> cgFontDescription(AdoptCF, CFCopyDescription(cgFont()
)); |
316 return String(cgFontDescription.get()) + " " + String::number(m_size) | 316 return String(cgFontDescription.get()) + " " + String::number(m_size) |
317 + (m_syntheticBold ? " synthetic bold" : "") + (m_syntheticOblique ?
" synthetic oblique" : "") + (m_orientation ? " vertical orientation" : ""); | 317 + (m_syntheticBold ? " synthetic bold" : "") + (m_syntheticOblique ?
" synthetic oblique" : "") + (m_orientation ? " vertical orientation" : ""); |
318 } | 318 } |
319 #endif | 319 #endif |
320 | 320 |
321 } // namespace WebCore | 321 } // namespace WebCore |
OLD | NEW |