Fixed <rdar://problem/
3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
Fixed w/o introducing a performance regression. Add early
check for Osaka-Mono to avoid expensive call into WebKit.
Reviewed by Vicki.
* kwq/KWQFont.mm:
(QFont::isFixedPitch):
WebKit:
Fixed <rdar://problem/
3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
Fixed w/o introducing a performance regression.
Reviewed by Vicki (and earlier by Dave Harrison).
* WebCoreSupport.subproj/WebTextRenderer.m:
(-[WebTextRenderer _computeWidthForSpace]):
(widthForNextCharacter):
* WebCoreSupport.subproj/WebTextRendererFactory.h:
* WebCoreSupport.subproj/WebTextRendererFactory.m:
(-[NSFont _web_isFakeFixedPitch]):
(-[WebTextRendererFactory isFontFixedPitch:]):
(-[WebTextRendererFactory fontWithFamily:traits:size:]):
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8626
268f45cc-cd09-0410-ab3c-
d52691b4dbfc
+2005-02-17 Richard Williamson <rjw@apple.com>
+
+ Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
+
+ Fixed w/o introducing a performance regression. Add early
+ check for Osaka-Mono to avoid expensive call into WebKit.
+
+ Reviewed by Vicki.
+
+ * kwq/KWQFont.mm:
+ (QFont::isFixedPitch):
+
2005-02-17 Darin Adler <darin@apple.com>
Reviewed by Kevin.
bool QFont::isFixedPitch() const
{
+ // Special case Osaka-Mono. Do it here rather than in WebKit
+ // for performance reaason. See <rdar://problem/3999467> for
+ // more details.
+ if (family() == "Osaka-Mono")
+ return true;
+
KWQ_BLOCK_EXCEPTIONS;
return [[WebCoreTextRendererFactory sharedFactory] isFontFixedPitch: getNSFont()];
KWQ_UNBLOCK_EXCEPTIONS;
+2005-02-17 Richard Williamson <rjw@apple.com>
+
+ Fixed <rdar://problem/3999467> when Osaka-Mono is specified as fixed width font, Osaka used instead
+
+ Fixed w/o introducing a performance regression.
+
+ Reviewed by Vicki (and earlier by Dave Harrison).
+
+ * WebCoreSupport.subproj/WebTextRenderer.m:
+ (-[WebTextRenderer _computeWidthForSpace]):
+ (widthForNextCharacter):
+ * WebCoreSupport.subproj/WebTextRendererFactory.h:
+ * WebCoreSupport.subproj/WebTextRendererFactory.m:
+ (-[NSFont _web_isFakeFixedPitch]):
+ (-[WebTextRendererFactory isFontFixedPitch:]):
+ (-[WebTextRendererFactory fontWithFamily:traits:size:]):
+
2005-02-17 Richard Williamson <rjw@apple.com>
Fixed <rdar://problem/3959304> PDF in img tag is not rendered correctly anymore
float width = widthForGlyph(self, spaceGlyph, 0);
spaceWidth = width;
- treatAsFixedPitch = [font isFixedPitch] || [font _isFakeFixedPitch];
+ treatAsFixedPitch = [font isFixedPitch] || [font _isFakeFixedPitch] || [font _web_isFakeFixedPitch];
adjustedSpaceWidth = treatAsFixedPitch ? CEIL_TO_INT(width) : ROUND_TO_INT(width);
return YES;
return INVALID_WIDTH;
const UniChar *cp = &run->characters[currentCharacter];
+
UnicodeChar c = *cp;
if (IsLowSurrogatePair(c))
- (WebGlyphBuffer *)glyphBufferForFont:(NSFont *)font andColor:(NSColor *)color;
@end
+
+@interface NSFont (WebPrivateExtensions)
+- (BOOL)_web_isFakeFixedPitch;
+@end
+
- (BOOL)_isFakeFixedPitch;
@end
+@implementation NSFont (WebPrivateExtensions)
+- (BOOL)_web_isFakeFixedPitch
+{
+ // Special case Osaka-Mono. According to <rdar://problem/3999467>, we should treat Osaka-Mono
+ // as fixed pitch.
+ if ([[self fontName] caseInsensitiveCompare:@"Osaka-Mono"] == NSOrderedSame)
+ return YES;
+ return NO;
+}
+@end
+
+
@implementation WebTextRendererFactory
- (BOOL)coalesceTextDrawing
- (BOOL)isFontFixedPitch: (NSFont *)font
{
- return [font isFixedPitch] || [font _isFakeFixedPitch];
+ return [font isFixedPitch] || [font _isFakeFixedPitch] || [font _web_isFakeFixedPitch];
}
- init
while ((availableFont = [availableFonts nextObject])) {
if ([desiredFamily caseInsensitiveCompare:availableFont] == NSOrderedSame) {
NSFont *nameMatchedFont = [NSFont fontWithName:availableFont size:size];
+
+ // Special case Osaka-Mono. According to <rdar://problem/3999467>, we need to
+ // treat Osaka-Mono as fixed pitch.
+ if ([desiredFamily caseInsensitiveCompare:@"Osaka-Mono"] == NSOrderedSame && desiredTraits == 0) {
+ LOG (FontSelection, "found exact match for Osaka-Mono\n");
+ return nameMatchedFont;
+ }
+
NSFontTraitMask traits = [fontManager traitsOfFont:nameMatchedFont];
if ((traits & desiredTraits) == desiredTraits){