Reviewed by Chris.
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Feb 2005 01:44:46 +0000 (01:44 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 3 Feb 2005 01:44:46 +0000 (01:44 +0000)
        - WebKit part of fix for <rdar://problem/3980651> REGRESSION (125-180): Huge number of pages printed from certain page,
        iFrame involved

        This also fixes the problems with printing from GMail, yay!

        * WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
        Don't adjust margins for header/footer here, because this is called for each subframe.
        (-[WebHTMLView knowsPageRange:]):
        Do adjust margins for header/footer here (analogous to WebTextView and WebImageView).
        Also, round the page height to an integer here (noticed in passing).

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

WebKit/ChangeLog
WebKit/WebView.subproj/WebHTMLView.m

index 13a2b0b5ec028abab2377fce89bee6d533b95eb4..3613bb6e7d009b30103c8ebaee3dc40fafb11009 100644 (file)
@@ -1,3 +1,19 @@
+2005-02-02  John Sullivan  <sullivan@apple.com>
+
+        Reviewed by Chris.
+        
+        - WebKit part of fix for <rdar://problem/3980651> REGRESSION (125-180): Huge number of pages printed from certain page, 
+        iFrame involved
+        
+        This also fixes the problems with printing from GMail, yay!
+
+        * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView _setPrinting:minimumPageWidth:maximumPageWidth:adjustViewSize:]):
+        Don't adjust margins for header/footer here, because this is called for each subframe.
+        (-[WebHTMLView knowsPageRange:]):
+        Do adjust margins for header/footer here (analogous to WebTextView and WebImageView).
+        Also, round the page height to an integer here (noticed in passing).
+
 2005-02-02  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3986546> Cut, delete, and paste menu items are active when a image is opened in window
index a02ce7d24a55fd580c9d81f2c64d205da8db05f0..2297fc4f2f837b615140addec71388f198dfca03 100644 (file)
@@ -2793,9 +2793,7 @@ static WebHTMLView *lastHitView = nil;
         [self setNeedsToApplyStyles:YES];
         [self setNeedsLayout:YES];
         [self layoutToMinimumPageWidth:minPageWidth maximumPageWidth:maxPageWidth adjustingViewSize:adjustViewSize];
-        if (printing) {
-            [[self _webView] _adjustPrintingMarginsForHeaderAndFooter];
-        } else {
+        if (!printing) {
             // Can't do this when starting printing or nested printing won't work, see 3491427.
             [self setNeedsDisplay:NO];
         }
@@ -2853,6 +2851,7 @@ static WebHTMLView *lastHitView = nil;
     return [self _scaleFactorForPrintOperation:printOperation];
 }
 
+// This is used for Carbon printing. At some point we might want to make this public API.
 - (void)setPageWidthForPrinting:(float)pageWidth
 {
     [self _setPrinting:NO minimumPageWidth:0. maximumPageWidth:0. adjustViewSize:NO];
@@ -2877,6 +2876,7 @@ static WebHTMLView *lastHitView = nil;
         maxLayoutWidth = paperWidth*PrintingMaximumShrinkFactor;
     }
     [self _setPrinting:YES minimumPageWidth:minLayoutWidth maximumPageWidth:maxLayoutWidth adjustViewSize:YES]; // will relayout
+    [[self _webView] _adjustPrintingMarginsForHeaderAndFooter];
     
     // 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
@@ -2888,7 +2888,7 @@ static WebHTMLView *lastHitView = nil;
     float userScaleFactor = [printOperation _web_pageSetupScaleFactor];
     [_private->pageRects release];
     NSArray *newPageRects = [[self _bridge] computePageRectsWithPrintWidthScaleFactor:userScaleFactor
-                                                                          printHeight:[self _calculatePrintHeight]/totalScaleFactor];
+                                                                          printHeight:floorf([self _calculatePrintHeight]/totalScaleFactor)];
     // AppKit gets all messed up if you give it a zero-length page count (see 3576334), so if we
     // hit that case we'll pass along a degenerate 1 pixel square to print. This will print
     // a blank page (with correct-looking header and footer if that option is on), which matches