diff options
Diffstat (limited to 'WebCore/page/PrintContext.cpp')
-rw-r--r-- | WebCore/page/PrintContext.cpp | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/WebCore/page/PrintContext.cpp b/WebCore/page/PrintContext.cpp index 74af4b1..7b0179d 100644 --- a/WebCore/page/PrintContext.cpp +++ b/WebCore/page/PrintContext.cpp @@ -117,7 +117,7 @@ void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz } while (printedPagesHeight < docHeight); } -void PrintContext::begin(float width) +void PrintContext::begin(float width, float height) { ASSERT(!m_isPrinting); m_isPrinting = true; @@ -136,11 +136,11 @@ void PrintContext::begin(float width) const float PrintingMaximumShrinkFactor = 2.0f; float minLayoutWidth = width * PrintingMinimumShrinkFactor; - float maxLayoutWidth = width * PrintingMaximumShrinkFactor; + float minLayoutHeight = height * PrintingMinimumShrinkFactor; // FIXME: This will modify the rendering of the on-screen frame. // Could lead to flicker during printing. - m_frame->setPrinting(true, minLayoutWidth, maxLayoutWidth, true); + m_frame->setPrinting(true, FloatSize(minLayoutWidth, minLayoutHeight), PrintingMaximumShrinkFactor / PrintingMinimumShrinkFactor, Frame::AdjustViewSize); } void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width) @@ -160,7 +160,7 @@ void PrintContext::end() { ASSERT(m_isPrinting); m_isPrinting = false; - m_frame->setPrinting(false, 0, 0, true); + m_frame->setPrinting(false, FloatSize(), 0, Frame::AdjustViewSize); } static RenderBoxModelObject* enclosingBoxModelObject(RenderObject* object) @@ -186,8 +186,10 @@ int PrintContext::pageNumberForElement(Element* element, const FloatSize& pageSi Frame* frame = element->document()->frame(); FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); PrintContext printContext(frame); - printContext.begin(pageRect.width()); - printContext.computePageRectsWithPageSize(pageSizeInPixels, false); + printContext.begin(pageRect.width(), pageRect.height()); + FloatSize scaledPageSize = pageSizeInPixels; + scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width()); + printContext.computePageRectsWithPageSize(scaledPageSize, false); int top = box->offsetTop(); int left = box->offsetLeft(); @@ -244,8 +246,11 @@ int PrintContext::numberOfPages(Frame* frame, const FloatSize& pageSizeInPixels) FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); PrintContext printContext(frame); - printContext.begin(pageRect.width()); - printContext.computePageRectsWithPageSize(pageSizeInPixels, false); + printContext.begin(pageRect.width(), pageRect.height()); + // Account for shrink-to-fit. + FloatSize scaledPageSize = pageSizeInPixels; + scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width()); + printContext.computePageRectsWithPageSize(scaledPageSize, false); return printContext.pageCount(); } @@ -257,7 +262,7 @@ void PrintContext::spoolAllPagesWithBoundaries(Frame* frame, GraphicsContext& gr frame->document()->updateLayout(); PrintContext printContext(frame); - printContext.begin(pageSizeInPixels.width()); + printContext.begin(pageSizeInPixels.width(), pageSizeInPixels.height()); float pageHeight; printContext.computePageRects(FloatRect(FloatPoint(0, 0), pageSizeInPixels), 0, 0, 1, pageHeight); |