| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007 Alp Toker <alp@atoker.com> | 2 * Copyright (C) 2007 Alp Toker <alp@atoker.com> |
| 3 * Copyright (C) 2007 Apple Inc. | 3 * Copyright (C) 2007 Apple Inc. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 164 // This function can be called multiple times to adjust printing parameters
without going back to screen mode. | 164 // This function can be called multiple times to adjust printing parameters
without going back to screen mode. |
| 165 m_isPrinting = true; | 165 m_isPrinting = true; |
| 166 | 166 |
| 167 FloatSize originalPageSize = FloatSize(width, height); | 167 FloatSize originalPageSize = FloatSize(width, height); |
| 168 FloatSize minLayoutSize = m_frame->resizePageRectsKeepingRatio(originalPageS
ize, FloatSize(width * printingMinimumShrinkFactor, height * printingMinimumShri
nkFactor)); | 168 FloatSize minLayoutSize = m_frame->resizePageRectsKeepingRatio(originalPageS
ize, FloatSize(width * printingMinimumShrinkFactor, height * printingMinimumShri
nkFactor)); |
| 169 | 169 |
| 170 // This changes layout, so callers need to make sure that they don't paint t
o screen while in printing mode. | 170 // This changes layout, so callers need to make sure that they don't paint t
o screen while in printing mode. |
| 171 m_frame->setPrinting(true, minLayoutSize, originalPageSize, printingMaximumS
hrinkFactor / printingMinimumShrinkFactor); | 171 m_frame->setPrinting(true, minLayoutSize, originalPageSize, printingMaximumS
hrinkFactor / printingMinimumShrinkFactor); |
| 172 } | 172 } |
| 173 | 173 |
| 174 float PrintContext::computeAutomaticScaleFactor(const FloatSize& availablePaperS
ize) | |
| 175 { | |
| 176 if (!m_frame->view()) | |
| 177 return 1; | |
| 178 | |
| 179 bool useViewWidth = true; | |
| 180 if (m_frame->document() && m_frame->document()->renderView()) | |
| 181 useViewWidth = m_frame->document()->renderView()->style()->isHorizontalW
ritingMode(); | |
| 182 | |
| 183 float viewLogicalWidth = useViewWidth ? m_frame->view()->contentsWidth() : m
_frame->view()->contentsHeight(); | |
| 184 if (viewLogicalWidth < 1) | |
| 185 return 1; | |
| 186 | |
| 187 float maxShrinkToFitScaleFactor = 1 / printingMaximumShrinkFactor; | |
| 188 float shrinkToFitScaleFactor = (useViewWidth ? availablePaperSize.width() :
availablePaperSize.height()) / viewLogicalWidth; | |
| 189 return max(maxShrinkToFitScaleFactor, shrinkToFitScaleFactor); | |
| 190 } | |
| 191 | |
| 192 void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width) | 174 void PrintContext::spoolPage(GraphicsContext& ctx, int pageNumber, float width) |
| 193 { | 175 { |
| 194 // FIXME: Not correct for vertical text. | 176 // FIXME: Not correct for vertical text. |
| 195 IntRect pageRect = m_pageRects[pageNumber]; | 177 IntRect pageRect = m_pageRects[pageNumber]; |
| 196 float scale = width / pageRect.width(); | 178 float scale = width / pageRect.width(); |
| 197 | 179 |
| 198 ctx.save(); | 180 ctx.save(); |
| 199 ctx.scale(FloatSize(scale, scale)); | 181 ctx.scale(FloatSize(scale, scale)); |
| 200 ctx.translate(-pageRect.x(), -pageRect.y()); | 182 ctx.translate(-pageRect.x(), -pageRect.y()); |
| 201 ctx.clip(pageRect); | 183 ctx.clip(pageRect); |
| 202 m_frame->view()->paintContents(&ctx, pageRect); | 184 m_frame->view()->paintContents(&ctx, pageRect); |
| 203 if (ctx.supportsURLFragments()) | 185 if (ctx.supportsURLFragments()) |
| 204 outputLinkedDestinations(ctx, m_frame->document(), pageRect); | 186 outputLinkedDestinations(ctx, m_frame->document(), pageRect); |
| 205 ctx.restore(); | 187 ctx.restore(); |
| 206 } | 188 } |
| 207 | 189 |
| 208 void PrintContext::spoolRect(GraphicsContext& ctx, const IntRect& rect) | |
| 209 { | |
| 210 // FIXME: Not correct for vertical text. | |
| 211 ctx.save(); | |
| 212 ctx.translate(-rect.x(), -rect.y()); | |
| 213 ctx.clip(rect); | |
| 214 m_frame->view()->paintContents(&ctx, rect); | |
| 215 ctx.restore(); | |
| 216 } | |
| 217 | |
| 218 void PrintContext::end() | 190 void PrintContext::end() |
| 219 { | 191 { |
| 220 ASSERT(m_isPrinting); | 192 ASSERT(m_isPrinting); |
| 221 m_isPrinting = false; | 193 m_isPrinting = false; |
| 222 m_frame->setPrinting(false, FloatSize(), FloatSize(), 0); | 194 m_frame->setPrinting(false, FloatSize(), FloatSize(), 0); |
| 223 m_linkedDestinations.clear(); | 195 m_linkedDestinations.clear(); |
| 224 m_linkedDestinationsValid = false; | 196 m_linkedDestinationsValid = false; |
| 225 } | 197 } |
| 226 | 198 |
| 227 static RenderBoxModelObject* enclosingBoxModelObject(RenderObject* object) | 199 static RenderBoxModelObject* enclosingBoxModelObject(RenderObject* object) |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 printContext.spoolPage(graphicsContext, pageIndex, pageWidth); | 373 printContext.spoolPage(graphicsContext, pageIndex, pageWidth); |
| 402 graphicsContext.restore(); | 374 graphicsContext.restore(); |
| 403 | 375 |
| 404 currentHeight += pageSizeInPixels.height() + 1; | 376 currentHeight += pageSizeInPixels.height() + 1; |
| 405 } | 377 } |
| 406 | 378 |
| 407 graphicsContext.restore(); | 379 graphicsContext.restore(); |
| 408 } | 380 } |
| 409 | 381 |
| 410 } | 382 } |
| OLD | NEW |