WebCore:
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Feb 2005 01:26:11 +0000 (01:26 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 18 Feb 2005 01:26:11 +0000 (01:26 +0000)
        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

WebCore/ChangeLog-2005-08-23
WebCore/kwq/KWQFont.mm
WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebTextRenderer.m
WebKit/WebCoreSupport.subproj/WebTextRendererFactory.h
WebKit/WebCoreSupport.subproj/WebTextRendererFactory.m

index fefa70784f46df4b81d236f68cd887b4bfa685c1..d87b36924fab39864a701c3ddaace82f8e5da20c 100644 (file)
@@ -1,3 +1,15 @@
+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.
index 4b132148416b77adc5756059c6673133add15931..ed9c950803e164179e52d892f469a23fa64fa5d0 100644 (file)
@@ -148,6 +148,12 @@ bool QFont::bold() const
 
 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;
index 108f44380b1f7c1d8accc48ae6bf7eff284402cc..297145d7fedd3694c4c03160a84b3cf45ccdb364 100644 (file)
@@ -1,3 +1,20 @@
+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
index 9b9fcbac0742dbb61faf7a5148d1cece81d30ee3..79fad2209503fda93eaed5c01164c76eca09d6d8 100644 (file)
@@ -846,7 +846,7 @@ static inline BOOL fontContainsString(NSFont *font, NSString *string)
     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;
@@ -1966,6 +1966,7 @@ static float widthForNextCharacter(CharacterWidthIterator *iterator, ATSGlyphRef
         return INVALID_WIDTH;
 
     const UniChar *cp = &run->characters[currentCharacter];
+    
     UnicodeChar c = *cp;
 
     if (IsLowSurrogatePair(c))
index f75aff6a4249d7726f6eae202b17397963de864c..6e3306ccbe741c64e67e19644da7a74849f2bdef 100644 (file)
@@ -29,3 +29,8 @@
 - (WebGlyphBuffer *)glyphBufferForFont:(NSFont *)font andColor:(NSColor *)color;
 
 @end
+
+@interface NSFont (WebPrivateExtensions)
+- (BOOL)_web_isFakeFixedPitch;
+@end
+
index dd2015ad680adf3452b8771ee78e485d1ce6c716..ebac34927f551f6eb5229059cfd0921c99df347c 100644 (file)
 - (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
@@ -249,7 +261,7 @@ fontsChanged( ATSFontNotificationInfoRef info, void *_factory)
 
 - (BOOL)isFontFixedPitch: (NSFont *)font
 {
-    return [font isFixedPitch] || [font _isFakeFixedPitch];
+    return [font isFixedPitch] || [font _isFakeFixedPitch] || [font _web_isFakeFixedPitch];
 }
 
 - init
@@ -425,6 +437,14 @@ static BOOL betterChoice(NSFontTraitMask desiredTraits, int desiredWeight,
     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){