<rdar://problem/5477240> Regression: Footer is too high in print preview
authoradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Sep 2007 00:19:49 +0000 (00:19 +0000)
committeradachan <adachan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 Sep 2007 00:19:49 +0000 (00:19 +0000)
        Reviewed by Steve.

WebCore:
        Make computePageRectsForFrame() return the height of the page adjusted for margins.

        * bridge/win/FrameWin.cpp:
        (WebCore::computePageRectsForFrame):
        * bridge/win/FrameWin.h:

WebKit/win:
        * WebFrame.cpp:
        (WebFrame::WebFrame): initialize new data member m_pageHeight, which is the height of the page adjusted for margins.
        (WebFrame::computePageRects): get the height of the page adjusted for margins by passing m_pageHeight to
        computePageRectsForFrame().
        (WebFrame::spoolPages): footer rect's top is the max of the bottom of the page content and the bottom of the page
        minus footer height.
        * WebFrame.h:

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

WebCore/ChangeLog
WebCore/bridge/win/FrameWin.cpp
WebCore/bridge/win/FrameWin.h
WebKit/win/ChangeLog
WebKit/win/WebFrame.cpp
WebKit/win/WebFrame.h

index 1e20190193bc5ec00fbae541a4bfe1f6087bc364..fdd650b3a68d797d4ff08f54b4a528d776a0139a 100644 (file)
@@ -1,3 +1,14 @@
+2007-09-20  Ada Chan  <adachan@apple.com>
+
+        <rdar://problem/5477240> Regression: Footer is too high in print preview
+        Make computePageRectsForFrame() return the height of the page adjusted for margins.
+
+        Reviewed by Steve.
+
+        * bridge/win/FrameWin.cpp:
+        (WebCore::computePageRectsForFrame):
+        * bridge/win/FrameWin.h:
+
 2007-09-19  Kevin McCullough  <kmccullough@apple.com>
 
         Reviewed by Hyatt.
index c43928f251e4006a321834001333c6d533eb89d5..8d85daf31dc4c0ae61cc5b84a7b1b2df6b6a674d 100644 (file)
@@ -84,11 +84,12 @@ KJS::Bindings::Instance* Frame::createScriptInstanceForWidget(Widget* widget)
 }
 
 
-void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor,Vector<IntRect>& pages)
+void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor,Vector<IntRect>& pages, int& outPageHeight)
 {
     ASSERT(frame);
 
     pages.clear();
+    outPageHeight = 0;
 
     if (!frame->document() || !frame->view() || !frame->document()->renderer())
         return;
@@ -109,6 +110,7 @@ void computePageRectsForFrame(Frame* frame, const IntRect& printRect, float head
  
     float pageWidth  = (float) root->docWidth();
     float pageHeight = pageWidth * ratio;
+    outPageHeight = (int) pageHeight;   // this is the height of the page adjusted by margins
     pageHeight -= (headerHeight + footerHeight);
 
     if (pageHeight <= 0) {
index a12bdc00138ebe7d47540f00df46499fe1036d71..405c7b2de6e5f03941b4338fc630a15d817ca9f2 100644 (file)
@@ -34,7 +34,7 @@ typedef struct HBITMAP__* HBITMAP;
 namespace WebCore {
 
     HBITMAP imageFromSelection(Frame* frame, bool forceWhiteText);
-    void computePageRectsForFrame(Frame*, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor,Vector<IntRect>& pages);
+    void computePageRectsForFrame(Frame*, const IntRect& printRect, float headerHeight, float footerHeight, float userScaleFactor,Vector<IntRect>& pages, int& pageHeight);
 
 }
 
index ded7b22a587c0665d41d2fc684b0b620a1a17adc..ba238a3bcf82d15153d50059229b0baf0e907519 100644 (file)
@@ -1,3 +1,17 @@
+2007-09-20  Ada Chan  <adachan@apple.com>
+
+        <rdar://problem/5477240> Regression: Footer is too high in print preview
+
+        Reviewed by Steve.
+
+        * WebFrame.cpp:
+        (WebFrame::WebFrame): initialize new data member m_pageHeight, which is the height of the page adjusted for margins.
+        (WebFrame::computePageRects): get the height of the page adjusted for margins by passing m_pageHeight to
+        computePageRectsForFrame().
+        (WebFrame::spoolPages): footer rect's top is the max of the bottom of the page content and the bottom of the page
+        minus footer height.
+        * WebFrame.h:
+
 2007-09-19  Kevin McCullough  <kmccullough@apple.com>
 
         Reviewed by Hyatt.
index 40169b7c2f410bff57dadc5d49286c8549852f32..d29124c5679eaede571836f40ebb92ddc4cd8e7e 100644 (file)
@@ -436,6 +436,7 @@ WebFrame::WebFrame()
 , d(new WebFrame::WebFramePrivate)
 , m_quickRedirectComing(false)
 , m_inPrintingMode(false)
+, m_pageHeight(0)
 {
     WebFrameCount++;
     gClassCount++;
@@ -2519,7 +2520,7 @@ const Vector<WebCore::IntRect>& WebFrame::computePageRects(HDC printDC)
         pageRect.width() - marginRect.x() - marginRect.right(),
         pageRect.height() - marginRect.y() - marginRect.bottom());
 
-    computePageRectsForFrame(coreFrame, adjustedRect, headerHeight, footerHeight, 1.0,m_pageRects);
+    computePageRectsForFrame(coreFrame, adjustedRect, headerHeight, footerHeight, 1.0,m_pageRects, m_pageHeight);
     
     return m_pageRects;
 }
@@ -2630,7 +2631,7 @@ HRESULT STDMETHODCALLTYPE WebFrame::spoolPages(
             }
 
             if (footerHeight) {
-                y = (int)headerHeight+pageRect.height();
+                y = max((int)headerHeight+pageRect.height(), m_pageHeight-(int)footerHeight);
                 RECT footerRect = {x, y, x+pageRect.width(), y+(int)footerHeight};
                 ui2->drawFooterInRect(d->webView, &footerRect, (OLE_HANDLE)(LONG64)pctx, ii+1, pageCount);
             }
index e85319e91b190324ced60f1b83e21bdb80624487..2d5bfbfaa64417735590fc9e6946737fae0422aa 100644 (file)
@@ -367,6 +367,7 @@ protected:
     WebCore::KURL       m_originalRequestURL;
     bool                m_inPrintingMode;
     Vector<WebCore::IntRect> m_pageRects;
+    int m_pageHeight;   // height of the page adjusted by margins
 };
 
 #endif