Fixed <rdar://problem/3895810> FATAL ERROR: <WebTextRenderer: 0x9328a20> unable...
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Dec 2004 22:17:22 +0000 (22:17 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 2 Dec 2004 22:17:22 +0000 (22:17 +0000)
We have a hack to replace Times with Times New Roman if we fail
        to setup Times.  If we then fail to setup Times New Roman we
        don't attempt to further fallback to the system font.  Added
        that additional fallback.

        Reviewed by Ken.

        * WebCoreSupport.subproj/WebTextRenderer.m:
        (+[WebTextRenderer webFallbackFontFamily]):
        (-[WebTextRenderer initWithFont:usingPrinterFont:]):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@8105 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/WebCoreSupport.subproj/WebTextRenderer.m

index f62d481e59f8631738e6b8629cb69e21962dd750..b4a6cfa6831382162300ae019d4bc329afba74d6 100644 (file)
@@ -1,3 +1,18 @@
+2004-12-02  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/3895810> FATAL ERROR: <WebTextRenderer: 0x9328a20> unable to initialize with font "Times-Roman 16.00 pt. S ....
+
+       We have a hack to replace Times with Times New Roman if we fail
+        to setup Times.  If we then fail to setup Times New Roman we
+        don't attempt to further fallback to the system font.  Added
+        that additional fallback.
+
+        Reviewed by Ken.
+
+        * WebCoreSupport.subproj/WebTextRenderer.m:
+        (+[WebTextRenderer webFallbackFontFamily]):
+        (-[WebTextRenderer initWithFont:usingPrinterFont:]):
+
 2004-12-02  Richard Williamson   <rjw@apple.com>
 
        Fixed build problem on Tiger8A821.  Private macro and function
index 586b0d74486f47e1104f20a07d88e96a2fde16a8..b20abdef36a0eebdce08b6d697a4a6a7c4bee1c3 100644 (file)
@@ -269,12 +269,19 @@ static NSString *pathFromFont(NSFont *font);
 // Globals
 static CFCharacterSetRef nonBaseChars = NULL;
 static BOOL bufferTextDrawing = NO;
-static NSString *WebFallbackFontFamily = nil;
 static BOOL alwaysUseATSU = NO;
 
 
 @implementation WebTextRenderer
 
++ (NSString *)webFallbackFontFamily
+{
+    static NSString *webFallbackFontFamily = nil;
+    if (!webFallbackFontFamily)
+       webFallbackFontFamily = [[[NSFont systemFontOfSize:16.0] familyName] retain];
+    return webFallbackFontFamily;
+}
+
 + (BOOL)shouldBufferTextDrawing
 {
     return bufferTextDrawing;
@@ -320,14 +327,11 @@ static BOOL alwaysUseATSU = NO;
         if ([[font familyName] isEqual:@"Times"])
             fallbackFontFamily = @"Times New Roman";
         else {
-            if (!WebFallbackFontFamily)
-                // Could use any size, we just care about the family of the system font.
-                WebFallbackFontFamily = [[[NSFont systemFontOfSize:16.0] familyName] retain];
-                
-            fallbackFontFamily = WebFallbackFontFamily;
+            fallbackFontFamily = [WebTextRenderer webFallbackFontFamily];
         }
         
-        // Try setting up the alternate font.
+        // Try setting up the alternate font.  This is a last ditch effort to use a
+       // substitute font when something has gone wrong.
         NSFont *initialFont = font;
         [initialFont autorelease];
         NSFont *af = [[NSFontManager sharedFontManager] convertFont:font toFamily:fallbackFontFamily];
@@ -335,8 +339,20 @@ static BOOL alwaysUseATSU = NO;
         NSString *filePath = pathFromFont(initialFont);
         filePath = filePath ? filePath : @"not known";
         if (![self _setupFont]){
-            // Give up!
-            FATAL_ALWAYS ("%@ unable to initialize with font %@ at %@", self, initialFont, filePath);
+           if ([fallbackFontFamily isEqual:@"Times New Roman"]) {
+               // OK, couldn't setup Times New Roman as an alternate to Times, fallback
+               // on the system font.  If this fails we have no alternative left.
+               af = [[NSFontManager sharedFontManager] convertFont:font toFamily:[WebTextRenderer webFallbackFontFamily]];
+               font = [(p ? [af printerFont] : [af screenFont]) retain];
+               if (![self _setupFont]){
+                   // We tried, Times, Times New Roman, and the system font.  No joy.  We have to give up.
+                   FATAL_ALWAYS ("%@ unable to initialize with font %@ at %@", self, initialFont, filePath);
+               }
+           }
+           else {
+               // We tried the requested font and the syste, font.  No joy.  We have to give up.
+               FATAL_ALWAYS ("%@ unable to initialize with font %@ at %@", self, initialFont, filePath);
+           }
         }
 
         // Report the problem.