summaryrefslogtreecommitdiffstats
path: root/WebCore/page/PrintContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'WebCore/page/PrintContext.cpp')
-rw-r--r--WebCore/page/PrintContext.cpp23
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);