[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

darin darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 07:31:12 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit 8bf65515f7621859d86fca34ece8ad4a1b6556b8
Author: darin <darin at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Mar 24 18:50:41 2003 +0000

    WebCore:
    
            Reviewed by John.
    
            - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)
    
            * kwq/KWQFontMetrics.mm: (QFontMetricsPrivate::getRenderer): Get a new renderer
            if the one we have is wrong printer-vs-screen-wise. For speed, use a global
            variable rather than methods.
            * kwq/KWQPainter.mm: (QPainter::_updateRenderer): Get a new renderer if the
            one we have is wrong printer-vs-screen-wise. For speed, use a global variable
            rather than methods.
    
            * kwq/KWQTextRendererFactory.h: Added. Exposes a global variable that tells whether we are
            in global "using printer font" mode.
            * kwq/WebCoreTextRendererFactory.h: Added setUsingPrinterFonts: and usingPrinterFonts methods.
            * kwq/WebCoreTextRendererFactory.m:
            (-[WebCoreTextRendererFactory setUsingPrinterFonts:]): Added. Sets global.
            (-[WebCoreTextRendererFactory usingPrinterFonts]): Added. Returns value of global.
    
            * WebCore.pbproj/project.pbxproj: Added KWQTextRendererFactory.h.
    
    WebKit:
    
            Reviewed by John.
    
            - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)
    
            * Misc.subproj/WebKitNSStringExtras.m: (-[NSString _web_widthWithFont:]):
            Pass usingPrinterFont:NO, since this is used exclusively for on-screen text, not printing.
            * Misc.subproj/WebStringTruncator.m: (truncateString): Ditto.
    
            * WebCoreSupport.subproj/WebTextRenderer.h: Add usingPrinterFont boolean field and parameter to init.
            * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer initWithFont:forScreen:]):
            Add usingPrinterFont parameter, and get the screen font if it's NO, also store the boolean
            for later use.
            (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding: attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:fontFamilies:]):
            Pass the usingPrinterFont parameter through when getting a substitute font.
    
            * WebCoreSupport.subproj/WebTextRendererFactory.h: Add separate caches for screen and printing text
            renderers. Add usingPrinterFont parameter to our rendererWithFont: method (the one inherited from WebCore
            still has no parameter).
            * WebCoreSupport.subproj/WebTextRendererFactory.m:
            (-[WebTextRendererFactory init]): Create both caches.
            (-[WebTextRendererFactory dealloc]): Release both caches.
            (-[WebTextRendererFactory rendererWithFont:]): Call the new rendererWithFont:usingPrinterFont: method,
            passing usingPrinterFonts from the WebCore side. Thus any fonts fetched by WebCore during printing
            are printing fonts, and otherwise they are screen fonts.
            (-[WebTextRendererFactory rendererWithFont:usingPrinterFont:]): Added. Has the code from the old
            rendererWithFont: method, but passes the usingPrinterFont parameter through to the WebTextRenderer
            init method.
    
            * WebView.subproj/WebHTMLView.m:
            (-[WebHTMLView initWithFrame:]): Don't set unused canDragTo and canDragFrom fields.
            (-[WebHTMLView drawRect:]): Call -[WebTextRendererFactory setUsingPrinterFonts:] here if we are printing,
            as indicated by the usingPrinterFonts field. The reason we do this only inside drawRect is so we don't
            affect redraws of other HTML views that are not being printed that might be in "needs display" state when
            printing began.
            (-[WebHTMLView _setUsingPrinterFonts:]): Added. Calls _setUsingPrinterFonts on all WebHTMLViews inside
            this one, then does the work for this one. Uses the frame hierarchy rather than the view hierarchy, but
            either would work. If printer font state is changing, then sets the WebTextRendererFactory mode, then
            forces a layout and application of styles, but without triggering display.
            (-[WebHTMLView beginDocument]): Do an explicit display so this view does not have to be displayed while
            it is in "use printer fonts" mode. Then call _setUsingPrinterFonts:YES so that drawRect will use printer
            fonts, and also that the WebCore data structures and layout will be updated to reflect printer fonts as
            opposed to screen fonts.
            (-[WebHTMLView endDocument]): Call _setUsingPrinterFonts:NO to restore things to normal after printing.
            * WebView.subproj/WebHTMLViewPrivate.h: Removed unused canDragTo, canDragFrom, and liveAllowsScrolling
            fields. Added usingPrinterFonts field.
    
            * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@3904 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2003-10-25 b/WebCore/ChangeLog-2003-10-25
index 07d1afd..a27652c 100644
--- a/WebCore/ChangeLog-2003-10-25
+++ b/WebCore/ChangeLog-2003-10-25
@@ -1,3 +1,25 @@
+2003-03-22  Darin Adler  <darin at apple.com>
+
+        Reviewed by John.
+
+        - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)
+
+        * kwq/KWQFontMetrics.mm: (QFontMetricsPrivate::getRenderer): Get a new renderer
+        if the one we have is wrong printer-vs-screen-wise. For speed, use a global
+        variable rather than methods.
+        * kwq/KWQPainter.mm: (QPainter::_updateRenderer): Get a new renderer if the
+        one we have is wrong printer-vs-screen-wise. For speed, use a global variable
+        rather than methods.
+
+        * kwq/KWQTextRendererFactory.h: Added. Exposes a global variable that tells whether we are
+        in global "using printer font" mode.
+        * kwq/WebCoreTextRendererFactory.h: Added setUsingPrinterFonts: and usingPrinterFonts methods.
+        * kwq/WebCoreTextRendererFactory.m:
+        (-[WebCoreTextRendererFactory setUsingPrinterFonts:]): Added. Sets global.
+        (-[WebCoreTextRendererFactory usingPrinterFonts]): Added. Returns value of global.
+
+        * WebCore.pbproj/project.pbxproj: Added KWQTextRendererFactory.h.
+
 2003-03-22  David Hyatt  <hyatt at apple.com>
 
 	Fix the top of the gamespot.com page on the PLT.  The
@@ -424,8 +446,6 @@
 
 2003-03-14  Maciej Stachowiak  <mjs at apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
 	- fixed 3190846 - REGRESSION: can't use Fidelity NetBenefits account
 	
         * khtml/html/html_baseimpl.cpp:
@@ -1431,8 +1451,6 @@
 
 	The bug # is 3175670.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/rendering/bidi.cpp:
 
 2003-02-25  David Hyatt  <hyatt at apple.com>
@@ -1909,8 +1927,6 @@
 	decl object (owned by the table).  This stops every cell in a table
 	from having the exact same values copied on the cell itself.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/css/cssstyleselector.cpp:
         * khtml/css/cssstyleselector.h:
         * khtml/html/html_tableimpl.cpp:
@@ -5402,8 +5418,6 @@
 	merging calcAbsoluteVertical to KHTML's trunk and then fixing
 	a math error in the bottom computation.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/html/html_baseimpl.cpp:
         (HTMLBodyElementImpl::parseAttribute):
         * khtml/rendering/render_box.cpp:
diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index 07d1afd..a27652c 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,25 @@
+2003-03-22  Darin Adler  <darin at apple.com>
+
+        Reviewed by John.
+
+        - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)
+
+        * kwq/KWQFontMetrics.mm: (QFontMetricsPrivate::getRenderer): Get a new renderer
+        if the one we have is wrong printer-vs-screen-wise. For speed, use a global
+        variable rather than methods.
+        * kwq/KWQPainter.mm: (QPainter::_updateRenderer): Get a new renderer if the
+        one we have is wrong printer-vs-screen-wise. For speed, use a global variable
+        rather than methods.
+
+        * kwq/KWQTextRendererFactory.h: Added. Exposes a global variable that tells whether we are
+        in global "using printer font" mode.
+        * kwq/WebCoreTextRendererFactory.h: Added setUsingPrinterFonts: and usingPrinterFonts methods.
+        * kwq/WebCoreTextRendererFactory.m:
+        (-[WebCoreTextRendererFactory setUsingPrinterFonts:]): Added. Sets global.
+        (-[WebCoreTextRendererFactory usingPrinterFonts]): Added. Returns value of global.
+
+        * WebCore.pbproj/project.pbxproj: Added KWQTextRendererFactory.h.
+
 2003-03-22  David Hyatt  <hyatt at apple.com>
 
 	Fix the top of the gamespot.com page on the PLT.  The
@@ -424,8 +446,6 @@
 
 2003-03-14  Maciej Stachowiak  <mjs at apple.com>
 
-        Reviewed by NOBODY (OOPS!).
-
 	- fixed 3190846 - REGRESSION: can't use Fidelity NetBenefits account
 	
         * khtml/html/html_baseimpl.cpp:
@@ -1431,8 +1451,6 @@
 
 	The bug # is 3175670.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/rendering/bidi.cpp:
 
 2003-02-25  David Hyatt  <hyatt at apple.com>
@@ -1909,8 +1927,6 @@
 	decl object (owned by the table).  This stops every cell in a table
 	from having the exact same values copied on the cell itself.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/css/cssstyleselector.cpp:
         * khtml/css/cssstyleselector.h:
         * khtml/html/html_tableimpl.cpp:
@@ -5402,8 +5418,6 @@
 	merging calcAbsoluteVertical to KHTML's trunk and then fixing
 	a math error in the bottom computation.
 	
-        Reviewed by NOBODY (OOPS!).
-
         * khtml/html/html_baseimpl.cpp:
         (HTMLBodyElementImpl::parseAttribute):
         * khtml/rendering/render_box.cpp:
diff --git a/WebCore/WebCore.pbproj/project.pbxproj b/WebCore/WebCore.pbproj/project.pbxproj
index 47776e5..6ae0629 100644
--- a/WebCore/WebCore.pbproj/project.pbxproj
+++ b/WebCore/WebCore.pbproj/project.pbxproj
@@ -493,6 +493,7 @@
 				F58786FD02DE3B8601EA4122,
 				F587870902DE3B8601EA4122,
 				F587871502DE3B8601EA4122,
+				9365C420042D169000A9CAC5,
 			);
 			isa = PBXHeadersBuildPhase;
 			runOnlyForDeploymentPostprocessing = 0;
@@ -1084,6 +1085,18 @@
 			path = parser.y;
 			refType = 4;
 		};
+		9365C41F042D169000A9CAC5 = {
+			fileEncoding = 4;
+			isa = PBXFileReference;
+			path = KWQTextRendererFactory.h;
+			refType = 4;
+		};
+		9365C420042D169000A9CAC5 = {
+			fileRef = 9365C41F042D169000A9CAC5;
+			isa = PBXBuildFile;
+			settings = {
+			};
+		};
 		9377FB55032C235C008635CE = {
 			fileEncoding = 30;
 			isa = PBXFileReference;
@@ -1780,24 +1793,25 @@
 				F587850302DE375901EA4122,
 				93861DDF032C2E52008635CE,
 				93861DE0032C2E52008635CE,
+				F583D50103140623018635CE,
+				F583D50203140623018635CE,
 				9394E0A403AA5BBE008635CE,
 				9394E0A503AA5BBE008635CE,
+				F587852A02DE375901EA4122,
 				93955A4103D72932008635CE,
 				93955A4203D72932008635CE,
 				93386B90037045B3008635CE,
 				93386B91037045B3008635CE,
-				F587851B02DE375901EA4122,
-				F587851C02DE375901EA4122,
-				F587852A02DE375901EA4122,
 				F587852F02DE375901EA4122,
 				F587853502DE375901EA4122,
 				F587853602DE375901EA4122,
+				F587851B02DE375901EA4122,
+				F587851C02DE375901EA4122,
+				9365C41F042D169000A9CAC5,
 				F587854002DE375901EA4122,
 				F587854102DE375901EA4122,
 				F587854302DE375901EA4122,
 				F587854402DE375901EA4122,
-				F583D50103140623018635CE,
-				F583D50203140623018635CE,
 			);
 			isa = PBXGroup;
 			name = other;
diff --git a/WebCore/kwq/KWQFontMetrics.mm b/WebCore/kwq/KWQFontMetrics.mm
index 30b8575..c63b9ec 100644
--- a/WebCore/kwq/KWQFontMetrics.mm
+++ b/WebCore/kwq/KWQFontMetrics.mm
@@ -29,6 +29,7 @@
 
 #import "KWQFont.h"
 #import "KWQLogging.h"
+#import "KWQTextRendererFactory.h"
 
 #import "WebCoreTextRenderer.h"
 #import "WebCoreTextRendererFactory.h"
@@ -45,8 +46,11 @@ struct QFontMetricsPrivate
     }
     id <WebCoreTextRenderer> getRenderer()
     {
-        if (!_renderer) {
+        if (!_renderer || _rendererUsesPrinterFont != KWQTextRendererFactoryUsingPrinterFonts) {
+            id <WebCoreTextRenderer> oldRenderer = _renderer;
             _renderer = [[[WebCoreTextRendererFactory sharedFactory] rendererWithFont:_font.getNSFont()] retain];
+            _rendererUsesPrinterFont = KWQTextRendererFactoryUsingPrinterFonts;
+            [oldRenderer release];
         }
         return _renderer;
     }
@@ -67,6 +71,7 @@ struct QFontMetricsPrivate
 private:
     QFont _font;
     id <WebCoreTextRenderer> _renderer;
+    bool _rendererUsesPrinterFont;
     
     QFontMetricsPrivate(const QFontMetricsPrivate&);
     QFontMetricsPrivate& operator=(const QFontMetricsPrivate&);
diff --git a/WebCore/kwq/KWQPainter.mm b/WebCore/kwq/KWQPainter.mm
index 87aa13c..fef8f4a 100644
--- a/WebCore/kwq/KWQPainter.mm
+++ b/WebCore/kwq/KWQPainter.mm
@@ -31,10 +31,11 @@
 #import "KWQPointArray.h"
 
 #import "KWQAssertions.h"
+#import "KWQTextRendererFactory.h"
 
-#import "WebCoreTextRendererFactory.h"
-#import "WebCoreTextRenderer.h"
 #import "WebCoreImageRenderer.h"
+#import "WebCoreTextRenderer.h"
+#import "WebCoreTextRendererFactory.h"
 
 struct QPState {
     QPState() : paintingDisabled(false) { }
@@ -46,12 +47,13 @@ struct QPState {
 };
 
 struct QPainterPrivate {
-    QPainterPrivate() : lastTextRenderer(0) { }
-    ~QPainterPrivate() { [lastTextRenderer release]; }
+    QPainterPrivate() : textRenderer(0) { }
+    ~QPainterPrivate() { [textRenderer release]; }
     QPState state;
     QPtrStack<QPState> stack;
-    id<WebCoreTextRenderer>lastTextRenderer;
-    QFont lastFont;
+    id <WebCoreTextRenderer> textRenderer;
+    bool textRendererUsesPrinterFont;
+    QFont textRendererFont;
 };
 
 QPainter::QPainter() : data(new QPainterPrivate)
@@ -423,12 +425,15 @@ void QPainter::drawTiledPixmap( int x, int y, int w, int h,
 
 void QPainter::_updateRenderer(NSString **families)
 {
-    if (data->state.font != data->lastFont || data->lastTextRenderer == 0){
-        data->lastFont = data->state.font;
-        [data->lastTextRenderer release];
-        data->lastTextRenderer = 
-            [[[WebCoreTextRendererFactory sharedFactory]
-                rendererWithFont: data->state.font.getNSFont()] retain];
+    if (data->textRenderer == 0
+            || data->textRendererUsesPrinterFont != KWQTextRendererFactoryUsingPrinterFonts
+            || data->state.font != data->textRendererFont) {
+        data->textRendererFont = data->state.font;
+        id <WebCoreTextRenderer> oldRenderer = data->textRenderer;
+        data->textRenderer = [[[WebCoreTextRendererFactory sharedFactory]
+            rendererWithFont:data->textRendererFont.getNSFont()] retain];
+        data->textRendererUsesPrinterFont = KWQTextRendererFactoryUsingPrinterFonts;
+        [oldRenderer release];
     }
 }
     
@@ -445,9 +450,9 @@ void QPainter::drawText(int x, int y, int, int, int alignmentFlags, const QStrin
     
     const UniChar* str = (const UniChar*)qstring.unicode();
     if (alignmentFlags & Qt::AlignRight)
-        x -= ROUND_TO_INT([data->lastTextRenderer floatWidthForCharacters:(const UniChar *)str stringLength:qstring.length() fromCharacterPosition:0 numberOfCharacters:qstring.length() withPadding: 0 applyRounding:YES attemptFontSubstitution: YES widths: 0 letterSpacing: 0 wordSpacing: 0 fontFamilies: families]);
+        x -= ROUND_TO_INT([data->textRenderer floatWidthForCharacters:(const UniChar *)str stringLength:qstring.length() fromCharacterPosition:0 numberOfCharacters:qstring.length() withPadding: 0 applyRounding:YES attemptFontSubstitution: YES widths: 0 letterSpacing: 0 wordSpacing: 0 fontFamilies: families]);
      
-    [data->lastTextRenderer drawCharacters:str stringLength:qstring.length()
+    [data->textRenderer drawCharacters:str stringLength:qstring.length()
         fromCharacterPosition:0 
         toCharacterPosition:qstring.length() 
         atPoint:NSMakePoint(x, y)
@@ -471,7 +476,7 @@ void QPainter::drawText(int x, int y, const QChar *str, int len, int from, int t
     
     _updateRenderer(families);
 
-    [data->lastTextRenderer
+    [data->textRenderer
     	drawCharacters:(const UniChar *)str stringLength:len
         fromCharacterPosition:from 
         toCharacterPosition:to 
@@ -490,7 +495,7 @@ void QPainter::drawLineForText(int x, int y, int yOffset, int width)
     if (data->state.paintingDisabled)
         return;
 
-    [data->lastTextRenderer
+    [data->textRenderer
         drawLineForCharacters: NSMakePoint(x, y)
                yOffset:(float)yOffset
              withWidth: width
diff --git a/WebCore/kwq/KWQKHTMLFind.h b/WebCore/kwq/KWQTextRendererFactory.h
similarity index 96%
copy from WebCore/kwq/KWQKHTMLFind.h
copy to WebCore/kwq/KWQTextRendererFactory.h
index aded276..1517493 100644
--- a/WebCore/kwq/KWQKHTMLFind.h
+++ b/WebCore/kwq/KWQTextRendererFactory.h
@@ -22,5 +22,5 @@
  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
-
-class KHTMLFind;
+ 
+extern bool KWQTextRendererFactoryUsingPrinterFonts;
diff --git a/WebCore/kwq/WebCoreTextRendererFactory.h b/WebCore/kwq/WebCoreTextRendererFactory.h
index d00d269..98b1b56 100644
--- a/WebCore/kwq/WebCoreTextRendererFactory.h
+++ b/WebCore/kwq/WebCoreTextRendererFactory.h
@@ -32,8 +32,15 @@
 }
 
 + (WebCoreTextRendererFactory *)sharedFactory;
-- (BOOL)isFontFixedPitch: (NSFont *)font;
-- (id <WebCoreTextRenderer>)rendererWithFont: (NSFont *)font;
+
+// Implemented on the WebCore side, not to be overriden by subclasses.
+// This affects only the renderer return from rendererWithFont:, not the font returned from fontWithFamilies:.
+- (void)setUsingPrinterFonts:(BOOL)usingPrinterFonts;
+- (BOOL)usingPrinterFonts;
+
+// Subclass responsibility.
 - (NSFont *)fontWithFamilies:(NSString **)families traits:(NSFontTraitMask)traits size:(float)size;
+- (BOOL)isFontFixedPitch:(NSFont *)font;
+- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font;
 
 @end
diff --git a/WebCore/kwq/WebCoreTextRendererFactory.m b/WebCore/kwq/WebCoreTextRendererFactory.m
index 1910d56..50ff4da 100644
--- a/WebCore/kwq/WebCoreTextRendererFactory.m
+++ b/WebCore/kwq/WebCoreTextRendererFactory.m
@@ -24,8 +24,11 @@
  */
 
 #import "WebCoreTextRendererFactory.h"
+
 #import "KWQAssertions.h"
 
+bool KWQTextRendererFactoryUsingPrinterFonts;
+
 @implementation WebCoreTextRendererFactory
 
 static WebCoreTextRendererFactory *sharedFactory;
@@ -35,11 +38,6 @@ static WebCoreTextRendererFactory *sharedFactory;
     return sharedFactory;
 }
 
-- (BOOL)isFontFixedPitch:(NSFont *)font
-{
-    return NO;
-}
-
 - init
 {
     [super init];
@@ -50,9 +48,14 @@ static WebCoreTextRendererFactory *sharedFactory;
     return self;
 }
 
-- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font
+- (void)setUsingPrinterFonts:(BOOL)usingPrinterFonts
 {
-    return nil;
+    KWQTextRendererFactoryUsingPrinterFonts = usingPrinterFonts;
+}
+
+- (BOOL)usingPrinterFonts
+{
+    return KWQTextRendererFactoryUsingPrinterFonts;
 }
 
 - (NSFont *)fontWithFamilies:(NSString **)families traits:(NSFontTraitMask)traits size:(float)size
@@ -60,4 +63,14 @@ static WebCoreTextRendererFactory *sharedFactory;
     return nil;
 }
 
+- (BOOL)isFontFixedPitch:(NSFont *)font
+{
+    return NO;
+}
+
+- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font
+{
+    return nil;
+}
+
 @end
diff --git a/WebCore/kwq/WebCoreTextRendererFactory.mm b/WebCore/kwq/WebCoreTextRendererFactory.mm
index 1910d56..50ff4da 100644
--- a/WebCore/kwq/WebCoreTextRendererFactory.mm
+++ b/WebCore/kwq/WebCoreTextRendererFactory.mm
@@ -24,8 +24,11 @@
  */
 
 #import "WebCoreTextRendererFactory.h"
+
 #import "KWQAssertions.h"
 
+bool KWQTextRendererFactoryUsingPrinterFonts;
+
 @implementation WebCoreTextRendererFactory
 
 static WebCoreTextRendererFactory *sharedFactory;
@@ -35,11 +38,6 @@ static WebCoreTextRendererFactory *sharedFactory;
     return sharedFactory;
 }
 
-- (BOOL)isFontFixedPitch:(NSFont *)font
-{
-    return NO;
-}
-
 - init
 {
     [super init];
@@ -50,9 +48,14 @@ static WebCoreTextRendererFactory *sharedFactory;
     return self;
 }
 
-- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font
+- (void)setUsingPrinterFonts:(BOOL)usingPrinterFonts
 {
-    return nil;
+    KWQTextRendererFactoryUsingPrinterFonts = usingPrinterFonts;
+}
+
+- (BOOL)usingPrinterFonts
+{
+    return KWQTextRendererFactoryUsingPrinterFonts;
 }
 
 - (NSFont *)fontWithFamilies:(NSString **)families traits:(NSFontTraitMask)traits size:(float)size
@@ -60,4 +63,14 @@ static WebCoreTextRendererFactory *sharedFactory;
     return nil;
 }
 
+- (BOOL)isFontFixedPitch:(NSFont *)font
+{
+    return NO;
+}
+
+- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font
+{
+    return nil;
+}
+
 @end
diff --git a/WebKit/ChangeLog b/WebKit/ChangeLog
index c697bd4..65ee284 100644
--- a/WebKit/ChangeLog
+++ b/WebKit/ChangeLog
@@ -1,3 +1,53 @@
+2003-03-22  Darin Adler  <darin at apple.com>
+
+        Reviewed by John.
+
+        - fixed 3203869 -- Monaco 9 looks different in Safari than in TextEdit (uses outline instead of bitmap)
+
+        * Misc.subproj/WebKitNSStringExtras.m: (-[NSString _web_widthWithFont:]):
+        Pass usingPrinterFont:NO, since this is used exclusively for on-screen text, not printing.
+        * Misc.subproj/WebStringTruncator.m: (truncateString): Ditto.
+
+        * WebCoreSupport.subproj/WebTextRenderer.h: Add usingPrinterFont boolean field and parameter to init.
+        * WebCoreSupport.subproj/WebTextRenderer.m: (-[WebTextRenderer initWithFont:forScreen:]):
+        Add usingPrinterFont parameter, and get the screen font if it's NO, also store the boolean
+        for later use.
+        (-[WebTextRenderer _floatWidthForCharacters:stringLength:fromCharacterPosition:numberOfCharacters:withPadding:applyRounding: attemptFontSubstitution:widths:fonts:glyphs:numGlyphs:letterSpacing:wordSpacing:fontFamilies:]):
+        Pass the usingPrinterFont parameter through when getting a substitute font.
+
+        * WebCoreSupport.subproj/WebTextRendererFactory.h: Add separate caches for screen and printing text
+        renderers. Add usingPrinterFont parameter to our rendererWithFont: method (the one inherited from WebCore
+        still has no parameter).
+        * WebCoreSupport.subproj/WebTextRendererFactory.m:
+        (-[WebTextRendererFactory init]): Create both caches.
+        (-[WebTextRendererFactory dealloc]): Release both caches.
+        (-[WebTextRendererFactory rendererWithFont:]): Call the new rendererWithFont:usingPrinterFont: method,
+        passing usingPrinterFonts from the WebCore side. Thus any fonts fetched by WebCore during printing
+        are printing fonts, and otherwise they are screen fonts.
+        (-[WebTextRendererFactory rendererWithFont:usingPrinterFont:]): Added. Has the code from the old
+        rendererWithFont: method, but passes the usingPrinterFont parameter through to the WebTextRenderer
+        init method.
+        
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView initWithFrame:]): Don't set unused canDragTo and canDragFrom fields.
+        (-[WebHTMLView drawRect:]): Call -[WebTextRendererFactory setUsingPrinterFonts:] here if we are printing,
+        as indicated by the usingPrinterFonts field. The reason we do this only inside drawRect is so we don't
+        affect redraws of other HTML views that are not being printed that might be in "needs display" state when
+        printing began. 
+        (-[WebHTMLView _setUsingPrinterFonts:]): Added. Calls _setUsingPrinterFonts on all WebHTMLViews inside
+        this one, then does the work for this one. Uses the frame hierarchy rather than the view hierarchy, but
+        either would work. If printer font state is changing, then sets the WebTextRendererFactory mode, then
+        forces a layout and application of styles, but without triggering display.
+        (-[WebHTMLView beginDocument]): Do an explicit display so this view does not have to be displayed while
+        it is in "use printer fonts" mode. Then call _setUsingPrinterFonts:YES so that drawRect will use printer
+        fonts, and also that the WebCore data structures and layout will be updated to reflect printer fonts as
+        opposed to screen fonts.
+        (-[WebHTMLView endDocument]): Call _setUsingPrinterFonts:NO to restore things to normal after printing.
+        * WebView.subproj/WebHTMLViewPrivate.h: Removed unused canDragTo, canDragFrom, and liveAllowsScrolling
+        fields. Added usingPrinterFonts field.
+
+        * English.lproj/StringsNotToBeLocalized.txt: Updated for recent changes.
+
 2003-03-24  Ken Kocienda  <kocienda at apple.com>
 
         Reviewed by Darin
diff --git a/WebKit/English.lproj/StringsNotToBeLocalized.txt b/WebKit/English.lproj/StringsNotToBeLocalized.txt
index f737a50..b8f5d8b 100644
--- a/WebKit/English.lproj/StringsNotToBeLocalized.txt
+++ b/WebKit/English.lproj/StringsNotToBeLocalized.txt
@@ -118,9 +118,9 @@
 "WebFrameStateComplete"
 "WebFrameStateLayoutAcceptable"
 "WebFrameStateProvisional"
-"WebHistoryAllEntriesRemovedNotification"
-"WebHistoryEntriesAddedNotification"
-"WebHistoryEntriesRemovedNotification"
+"WebHistoryAllItemsRemovedNotification"
+"WebHistoryItemsAddedNotification"
+"WebHistoryItemsRemovedNotification"
 "WebHistoryLoadedNotification"
 "WebHostToSiteURLs"
 "WebIconDatabaseDidAddIconNotification"
@@ -212,8 +212,12 @@
 "mpg4"
 "nullplugin"
 "text/"
+"text/calendar"
 "text/html"
 "text/rtf"
+"text/vcard"
+"text/x-calendar"
+"text/x-vcard"
 "text/xml"
 "tiff"
 "url_icon"
@@ -222,6 +226,7 @@
 History.subproj/WebHistoryItem.m:" in \"%@\""
 History.subproj/WebHistoryItem.m:"children"
 History.subproj/WebHistoryItem.m:"title"
+Misc.subproj/WebIconDatabase.m:"????"
 Misc.subproj/WebKitLogging.m
 Plugins.subproj/WebBasePluginPackage.m:"name: %@\npath: %@\nmimeTypes:\n%@\npluginDescription:%@"
 Plugins.subproj/WebNetscapePluginPackage.m:"main"
diff --git a/WebKit/Misc.subproj/WebKitNSStringExtras.m b/WebKit/Misc.subproj/WebKitNSStringExtras.m
index fd9f36f..ac6399b 100644
--- a/WebKit/Misc.subproj/WebKitNSStringExtras.m
+++ b/WebKit/Misc.subproj/WebKitNSStringExtras.m
@@ -10,9 +10,9 @@
 
 @implementation NSString (WebKitExtras)
 
-- (void)_web_drawAtPoint:(NSPoint)point font: (NSFont *)font textColor:(NSColor *)textColor;
+- (void)_web_drawAtPoint:(NSPoint)point font:(NSFont *)font textColor:(NSColor *)textColor;
 {
-    WebTextRenderer *renderer = [[WebTextRendererFactory sharedFactory] rendererWithFont:font];
+    WebTextRenderer *renderer = [[WebTextRendererFactory sharedFactory] rendererWithFont:font usingPrinterFont:NO];
     unsigned length = [self length];
     UniChar *buffer = (UniChar *)malloc(sizeof(UniChar) * length);
 
@@ -39,7 +39,7 @@
     UniChar *buffer = (UniChar *)malloc(sizeof(UniChar) * length);
 
     [self getCharacters:buffer];
-    WebTextRenderer *renderer = [[WebTextRendererFactory sharedFactory] rendererWithFont:font];
+    WebTextRenderer *renderer = [[WebTextRendererFactory sharedFactory] rendererWithFont:font usingPrinterFont:NO];
     width = [renderer _floatWidthForCharacters:buffer
                 stringLength:length
                 fromCharacterPosition: 0
diff --git a/WebKit/Misc.subproj/WebStringTruncator.m b/WebKit/Misc.subproj/WebStringTruncator.m
index 20505b5..a019120 100644
--- a/WebKit/Misc.subproj/WebStringTruncator.m
+++ b/WebKit/Misc.subproj/WebStringTruncator.m
@@ -92,7 +92,7 @@ static NSString *truncateString(NSString *string, float maxWidth, NSFont *font,
         currentFont = [font retain];
         [currentRenderer release];
         [WebTextRendererFactory createSharedFactory];
-        currentRenderer = [[[WebTextRendererFactory sharedFactory] rendererWithFont:font] retain];
+        currentRenderer = [[[WebTextRendererFactory sharedFactory] rendererWithFont:font usingPrinterFont:NO] retain];
         ellipsis = ELLIPSIS_CHARACTER;
         currentEllipsisWidth = stringWidth(currentRenderer, &ellipsis, 1);
     }
diff --git a/WebKit/WebCoreSupport.subproj/WebTextRenderer.h b/WebKit/WebCoreSupport.subproj/WebTextRenderer.h
index b1f168d..51792e2 100644
--- a/WebKit/WebCoreSupport.subproj/WebTextRenderer.h
+++ b/WebKit/WebCoreSupport.subproj/WebTextRenderer.h
@@ -30,11 +30,14 @@ typedef struct UnicodeGlyphMap UnicodeGlyphMap;
     float ceiledSpaceWidth;
     float roundedSpaceWidth;
     float adjustedSpaceWidth;
+
+ at private
+    BOOL usingPrinterFont;
 }
 
 + (BOOL)shouldBufferTextDrawing;
 
-- initWithFont:(NSFont *)font;
+- initWithFont:(NSFont *)font usingPrinterFont:(BOOL)usingPrinterFont;
 
 - (float)_floatWidthForCharacters:(const UniChar *)characters stringLength:(unsigned)stringLength fromCharacterPosition: (int)pos numberOfCharacters: (int)len withPadding: (int)padding applyRounding: (BOOL)applyRounding attemptFontSubstitution: (BOOL)attemptSubstitution widths: (float *)widthBuffer fonts: (NSFont **)fontBuffer glyphs: (CGGlyph *)glyphBuffer numGlyphs: (int *)_numGlyphs letterSpacing: (int)ls wordSpacing: (int)ws fontFamilies: (NSString **)families;
 
diff --git a/WebKit/WebCoreSupport.subproj/WebTextRenderer.m b/WebKit/WebCoreSupport.subproj/WebTextRenderer.m
index 2fabdca..f0faf31 100644
--- a/WebKit/WebCoreSupport.subproj/WebTextRenderer.m
+++ b/WebKit/WebCoreSupport.subproj/WebTextRenderer.m
@@ -457,7 +457,7 @@ static inline BOOL _fontContainsString (NSFont *font, NSString *string)
 }
 
 
-- initWithFont:(NSFont *)f
+- initWithFont:(NSFont *)f usingPrinterFont:(BOOL)p
 {
     if ([f glyphPacking] != NSNativeShortGlyphPacking &&
         [f glyphPacking] != NSTwoByteGlyphPacking)
@@ -465,7 +465,8 @@ static inline BOOL _fontContainsString (NSFont *font, NSString *string)
         
     [super init];
     
-    font = [f retain];
+    font = [(p ? [f printerFont] : [f screenFont]) retain];
+    usingPrinterFont = p;
     
     OSStatus errCode;
     ATSUStyle style;
@@ -981,7 +982,7 @@ static const char *joiningNames[] = {
                 int cNumGlyphs;
                 ATSGlyphRef localGlyphBuffer[clusterLength*4];
                 
-                lastWidth = [[[WebTextRendererFactory sharedFactory] rendererWithFont: substituteFont] 
+                lastWidth = [[[WebTextRendererFactory sharedFactory] rendererWithFont:substituteFont usingPrinterFont:usingPrinterFont]
                                 _floatWidthForCharacters: _characters 
                                 stringLength: clusterLength 
                                 fromCharacterPosition: 0 numberOfCharacters: clusterLength 
diff --git a/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.h b/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.h
index b48f548..144d365 100644
--- a/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.h
+++ b/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.h
@@ -11,7 +11,8 @@
 
 @interface WebTextRendererFactory : WebCoreTextRendererFactory
 {
-    NSMutableDictionary *cache;
+    NSMutableDictionary *cacheForScreen;
+    NSMutableDictionary *cacheForPrinter;
     NSMutableDictionary *viewBuffers;
     NSMutableArray *viewStack;
 }
@@ -21,12 +22,12 @@
 - (NSFont *)cachedFontFromFamily:(NSString *)family traits:(NSFontTraitMask)traits size:(float)size;
 - init;
 
-- (WebTextRenderer *)rendererWithFont:(NSFont *)font;
+- (WebTextRenderer *)rendererWithFont:(NSFont *)font usingPrinterFont:(BOOL)usingPrinterFont;
 
 - (BOOL)coalesceTextDrawing;
 - (void)endCoalesceTextDrawing;
 - (void)startCoalesceTextDrawing;
 
-- (WebGlyphBuffer *)glyphBufferForFont: (NSFont *)font andColor: (NSColor *)color;
+- (WebGlyphBuffer *)glyphBufferForFont:(NSFont *)font andColor:(NSColor *)color;
 
 @end
diff --git a/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.m b/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.m
index 2b3a676..328bf88 100644
--- a/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.m
+++ b/WebKit/WebCoreSupport.subproj/WebTextRendererFactory.m
@@ -277,25 +277,33 @@ static int getLCDScaleParameters(void)
 {
     [super init];
     
-    cache = [[NSMutableDictionary alloc] init];
+    cacheForScreen = [[NSMutableDictionary alloc] init];
+    cacheForPrinter = [[NSMutableDictionary alloc] init];
     
     return self;
 }
 
 - (void)dealloc
 {
-    [cache release];
+    [cacheForScreen release];
+    [cacheForPrinter release];
     [viewBuffers release];
     [viewStack release];
     
     [super dealloc];
 }
 
-- (WebTextRenderer *)rendererWithFont:(NSFont *)font
+- (id <WebCoreTextRenderer>)rendererWithFont:(NSFont *)font
 {
+    return [self rendererWithFont:font usingPrinterFont:[self usingPrinterFonts]];
+}
+
+- (WebTextRenderer *)rendererWithFont:(NSFont *)font usingPrinterFont:(BOOL)usingPrinterFont
+{
+    NSMutableDictionary *cache = usingPrinterFont ? cacheForPrinter : cacheForScreen;
     WebTextRenderer *renderer = [cache objectForKey:font];
     if (renderer == nil) {
-        renderer = [[WebTextRenderer alloc] initWithFont:font];
+        renderer = [[WebTextRenderer alloc] initWithFont:font usingPrinterFont:usingPrinterFont];
         [cache setObject:renderer forKey:font];
         [renderer release];
     }
diff --git a/WebKit/WebView.subproj/WebHTMLView.m b/WebKit/WebView.subproj/WebHTMLView.m
index 0be5e4f..6167b12 100644
--- a/WebKit/WebView.subproj/WebHTMLView.m
+++ b/WebKit/WebView.subproj/WebHTMLView.m
@@ -49,9 +49,6 @@
 
     _private->needsLayout = YES;
 
-    _private->canDragTo = YES;
-    _private->canDragFrom = YES;
-
     return self;
 }
 
@@ -454,6 +451,10 @@
 {
     LOG(View, "%@ drawing", self);
     
+    if (_private->usingPrinterFonts) {
+        [[WebTextRendererFactory sharedFactory] setUsingPrinterFonts:YES];
+    }
+
     BOOL subviewsWereSetAside = _private->subviewsSetAside;
     if (subviewsWereSetAside) {
         [self _restoreSubviews];
@@ -537,6 +538,10 @@
     if (subviewsWereSetAside) {
         [self _setAsideSubviews];
     }
+
+    if (_private->usingPrinterFonts) {
+        [[WebTextRendererFactory sharedFactory] setUsingPrinterFonts:NO];
+    }
 }
 
 // Turn off the additional clip while computing our visibleRect.
@@ -741,4 +746,48 @@
 {
 }
 
+// Does setNeedsDisplay:NO as a side effect. Useful for begin/endDocument.
+- (void)_setUsingPrinterFonts:(BOOL)usingPrinterFonts
+{
+    WebFrame *frame = [self _frame];
+    NSArray *subframes = [frame children];
+    unsigned n = [subframes count];
+    unsigned i;
+    for (i = 0; i != n; ++i) {
+        WebFrame *subframe = [subframes objectAtIndex:i];
+        WebFrameView *frameView = [subframe frameView];
+        if ([frameView isDocumentHTML]) {
+            [(WebHTMLView *)[frameView documentView] _setUsingPrinterFonts:usingPrinterFonts];
+        }
+    }
+
+    if (usingPrinterFonts != _private->usingPrinterFonts) {
+        _private->usingPrinterFonts = usingPrinterFonts;
+        [[WebTextRendererFactory sharedFactory] setUsingPrinterFonts:usingPrinterFonts];
+        [self setNeedsToApplyStyles:YES];
+        [self setNeedsLayout:YES];
+        [self layout];
+        [self setNeedsDisplay:NO];
+        [[WebTextRendererFactory sharedFactory] setUsingPrinterFonts:NO];
+    }
+}
+
+- (void)beginDocument
+{
+    // Must do this explicit display here, because otherwise the view might redisplay while the print
+    // sheet was up, using printer fonts (and looking different).
+    [self displayIfNeeded];
+    [self _setUsingPrinterFonts:YES];
+    [super beginDocument];
+    // There is a theoretical chance that someone could do some drawing between here and endDocument,
+    // if something caused setNeedsDisplay after this point. If so, it's not a big tragedy, because
+    // you'd simply see the printer fonts on screen. As of this writing, this does not happen with Safari.
+}
+
+- (void)endDocument
+{
+    [super endDocument];
+    [self _setUsingPrinterFonts:NO];
+}
+
 @end
diff --git a/WebKit/WebView.subproj/WebHTMLViewPrivate.h b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
index e98b6df..5a541d1 100644
--- a/WebKit/WebView.subproj/WebHTMLViewPrivate.h
+++ b/WebKit/WebView.subproj/WebHTMLViewPrivate.h
@@ -18,12 +18,10 @@
 @public
     BOOL needsLayout;
     BOOL needsToApplyStyles;
-    BOOL canDragTo;
-    BOOL canDragFrom;
-    BOOL liveAllowsScrolling;
     BOOL inWindow;
     BOOL inNextValidKeyView;
     BOOL ignoringMouseDraggedEvents;
+    BOOL usingPrinterFonts;
     
     id savedSubviews;
     BOOL subviewsSetAside;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list