| 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 63 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 74     float pageHeight = pageSize.height(); | 74     float pageHeight = pageSize.height(); | 
| 75 | 75 | 
| 76     outPageHeight = pageHeight; // this is the height of the page adjusted by ma
     rgins | 76     outPageHeight = pageHeight; // this is the height of the page adjusted by ma
     rgins | 
| 77     pageHeight -= headerHeight + footerHeight; | 77     pageHeight -= headerHeight + footerHeight; | 
| 78 | 78 | 
| 79     if (pageHeight <= 0) { | 79     if (pageHeight <= 0) { | 
| 80         WTF_LOG_ERROR("pageHeight has bad value %.2f", pageHeight); | 80         WTF_LOG_ERROR("pageHeight has bad value %.2f", pageHeight); | 
| 81         return; | 81         return; | 
| 82     } | 82     } | 
| 83 | 83 | 
| 84     computePageRectsWithPageSizeInternal(FloatSize(pageWidth / userScaleFactor, 
     pageHeight / userScaleFactor), false); | 84     computePageRectsWithPageSizeInternal(FloatSize(pageWidth / userScaleFactor, 
     pageHeight / userScaleFactor)); | 
| 85 } | 85 } | 
| 86 | 86 | 
| 87 void PrintContext::computePageRectsWithPageSize(const FloatSize& pageSizeInPixel
     s, bool allowHorizontalTiling) | 87 void PrintContext::computePageRectsWithPageSize(const FloatSize& pageSizeInPixel
     s) | 
| 88 { | 88 { | 
| 89     m_pageRects.clear(); | 89     m_pageRects.clear(); | 
| 90     computePageRectsWithPageSizeInternal(pageSizeInPixels, allowHorizontalTiling
     ); | 90     computePageRectsWithPageSizeInternal(pageSizeInPixels); | 
| 91 } | 91 } | 
| 92 | 92 | 
| 93 void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz
     eInPixels, bool allowInlineDirectionTiling) | 93 void PrintContext::computePageRectsWithPageSizeInternal(const FloatSize& pageSiz
     eInPixels) | 
| 94 { | 94 { | 
| 95     if (!m_frame->document() || !m_frame->view() || !m_frame->document()->layout
     View()) | 95     if (!m_frame->document() || !m_frame->view() || !m_frame->document()->layout
     View()) | 
| 96         return; | 96         return; | 
| 97 | 97 | 
| 98     LayoutView* view = m_frame->document()->layoutView(); | 98     LayoutView* view = m_frame->document()->layoutView(); | 
| 99 | 99 | 
| 100     IntRect docRect = view->documentRect(); | 100     IntRect docRect = view->documentRect(); | 
| 101 | 101 | 
| 102     int pageWidth = pageSizeInPixels.width(); | 102     int pageWidth = pageSizeInPixels.width(); | 
| 103     int pageHeight = pageSizeInPixels.height(); | 103     int pageHeight = pageSizeInPixels.height(); | 
| (...skipping 28 matching lines...) Expand all  Loading... | 
| 132         } | 132         } | 
| 133         inlineDirectionStart = view->style()->isLeftToRightDirection() ? docRect
     .y() : docRect.maxY(); | 133         inlineDirectionStart = view->style()->isLeftToRightDirection() ? docRect
     .y() : docRect.maxY(); | 
| 134         inlineDirectionEnd = view->style()->isLeftToRightDirection() ? docRect.m
     axY() : docRect.y(); | 134         inlineDirectionEnd = view->style()->isLeftToRightDirection() ? docRect.m
     axY() : docRect.y(); | 
| 135     } | 135     } | 
| 136 | 136 | 
| 137     unsigned pageCount = ceilf((float)docLogicalHeight / pageLogicalHeight); | 137     unsigned pageCount = ceilf((float)docLogicalHeight / pageLogicalHeight); | 
| 138     for (unsigned i = 0; i < pageCount; ++i) { | 138     for (unsigned i = 0; i < pageCount; ++i) { | 
| 139         int pageLogicalTop = blockDirectionEnd > blockDirectionStart ? | 139         int pageLogicalTop = blockDirectionEnd > blockDirectionStart ? | 
| 140                                 blockDirectionStart + i * pageLogicalHeight : | 140                                 blockDirectionStart + i * pageLogicalHeight : | 
| 141                                 blockDirectionStart - (i + 1) * pageLogicalHeigh
     t; | 141                                 blockDirectionStart - (i + 1) * pageLogicalHeigh
     t; | 
| 142         if (allowInlineDirectionTiling) { | 142 | 
| 143             for (int currentInlinePosition = inlineDirectionStart; | 143         int pageLogicalLeft = inlineDirectionEnd > inlineDirectionStart ? inline
     DirectionStart : inlineDirectionStart - pageLogicalWidth; | 
| 144                  inlineDirectionEnd > inlineDirectionStart ? currentInlinePositi
     on < inlineDirectionEnd : currentInlinePosition > inlineDirectionEnd; | 144         IntRect pageRect(pageLogicalLeft, pageLogicalTop, pageLogicalWidth, page
     LogicalHeight); | 
| 145                  currentInlinePosition += (inlineDirectionEnd > inlineDirectionS
     tart ? pageLogicalWidth : -pageLogicalWidth)) { | 145         if (!isHorizontal) | 
| 146                 int pageLogicalLeft = inlineDirectionEnd > inlineDirectionStart 
     ? currentInlinePosition : currentInlinePosition - pageLogicalWidth; | 146             pageRect = pageRect.transposedRect(); | 
| 147                 IntRect pageRect(pageLogicalLeft, pageLogicalTop, pageLogicalWid
     th, pageLogicalHeight); | 147         m_pageRects.append(pageRect); | 
| 148                 if (!isHorizontal) | 148 | 
| 149                     pageRect = pageRect.transposedRect(); |  | 
| 150                 m_pageRects.append(pageRect); |  | 
| 151             } |  | 
| 152         } else { |  | 
| 153             int pageLogicalLeft = inlineDirectionEnd > inlineDirectionStart ? in
     lineDirectionStart : inlineDirectionStart - pageLogicalWidth; |  | 
| 154             IntRect pageRect(pageLogicalLeft, pageLogicalTop, pageLogicalWidth, 
     pageLogicalHeight); |  | 
| 155             if (!isHorizontal) |  | 
| 156                 pageRect = pageRect.transposedRect(); |  | 
| 157             m_pageRects.append(pageRect); |  | 
| 158         } |  | 
| 159     } | 149     } | 
| 160 } | 150 } | 
| 161 | 151 | 
| 162 void PrintContext::begin(float width, float height) | 152 void PrintContext::begin(float width, float height) | 
| 163 { | 153 { | 
| 164     // This function can be called multiple times to adjust printing parameters 
     without going back to screen mode. | 154     // This function can be called multiple times to adjust printing parameters 
     without going back to screen mode. | 
| 165     m_isPrinting = true; | 155     m_isPrinting = true; | 
| 166 | 156 | 
| 167     FloatSize originalPageSize = FloatSize(width, height); | 157     FloatSize originalPageSize = FloatSize(width, height); | 
| 168     FloatSize minLayoutSize = m_frame->resizePageRectsKeepingRatio(originalPageS
     ize, FloatSize(width * printingMinimumShrinkFactor, height * printingMinimumShri
     nkFactor)); | 158     FloatSize minLayoutSize = m_frame->resizePageRectsKeepingRatio(originalPageS
     ize, FloatSize(width * printingMinimumShrinkFactor, height * printingMinimumShri
     nkFactor)); | 
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 200     LayoutBoxModelObject* box = enclosingBoxModelObject(element->layoutObject())
     ; | 190     LayoutBoxModelObject* box = enclosingBoxModelObject(element->layoutObject())
     ; | 
| 201     if (!box) | 191     if (!box) | 
| 202         return -1; | 192         return -1; | 
| 203 | 193 | 
| 204     LocalFrame* frame = element->document().frame(); | 194     LocalFrame* frame = element->document().frame(); | 
| 205     FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); | 195     FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); | 
| 206     PrintContext printContext(frame); | 196     PrintContext printContext(frame); | 
| 207     printContext.begin(pageRect.width(), pageRect.height()); | 197     printContext.begin(pageRect.width(), pageRect.height()); | 
| 208     FloatSize scaledPageSize = pageSizeInPixels; | 198     FloatSize scaledPageSize = pageSizeInPixels; | 
| 209     scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width(
     )); | 199     scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width(
     )); | 
| 210     printContext.computePageRectsWithPageSize(scaledPageSize, false); | 200     printContext.computePageRectsWithPageSize(scaledPageSize); | 
| 211 | 201 | 
| 212     int top = box->pixelSnappedOffsetTop(); | 202     int top = box->pixelSnappedOffsetTop(); | 
| 213     int left = box->pixelSnappedOffsetLeft(); | 203     int left = box->pixelSnappedOffsetLeft(); | 
| 214     size_t pageNumber = 0; | 204     size_t pageNumber = 0; | 
| 215     for (; pageNumber < printContext.pageCount(); pageNumber++) { | 205     for (; pageNumber < printContext.pageCount(); pageNumber++) { | 
| 216         const IntRect& page = printContext.pageRect(pageNumber); | 206         const IntRect& page = printContext.pageRect(pageNumber); | 
| 217         if (page.x() <= left && left < page.maxX() && page.y() <= top && top < p
     age.maxY()) | 207         if (page.x() <= left && left < page.maxX() && page.y() <= top && top < p
     age.maxY()) | 
| 218             return pageNumber; | 208             return pageNumber; | 
| 219     } | 209     } | 
| 220     return -1; | 210     return -1; | 
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 338 int PrintContext::numberOfPages(LocalFrame* frame, const FloatSize& pageSizeInPi
     xels) | 328 int PrintContext::numberOfPages(LocalFrame* frame, const FloatSize& pageSizeInPi
     xels) | 
| 339 { | 329 { | 
| 340     frame->document()->updateLayout(); | 330     frame->document()->updateLayout(); | 
| 341 | 331 | 
| 342     FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); | 332     FloatRect pageRect(FloatPoint(0, 0), pageSizeInPixels); | 
| 343     PrintContext printContext(frame); | 333     PrintContext printContext(frame); | 
| 344     printContext.begin(pageRect.width(), pageRect.height()); | 334     printContext.begin(pageRect.width(), pageRect.height()); | 
| 345     // Account for shrink-to-fit. | 335     // Account for shrink-to-fit. | 
| 346     FloatSize scaledPageSize = pageSizeInPixels; | 336     FloatSize scaledPageSize = pageSizeInPixels; | 
| 347     scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width(
     )); | 337     scaledPageSize.scale(frame->view()->contentsSize().width() / pageRect.width(
     )); | 
| 348     printContext.computePageRectsWithPageSize(scaledPageSize, false); | 338     printContext.computePageRectsWithPageSize(scaledPageSize); | 
| 349     return printContext.pageCount(); | 339     return printContext.pageCount(); | 
| 350 } | 340 } | 
| 351 | 341 | 
| 352 DEFINE_TRACE(PrintContext) | 342 DEFINE_TRACE(PrintContext) | 
| 353 { | 343 { | 
| 354 #if ENABLE(OILPAN) | 344 #if ENABLE(OILPAN) | 
| 355     visitor->trace(m_frame); | 345     visitor->trace(m_frame); | 
| 356     visitor->trace(m_linkDestinations); | 346     visitor->trace(m_linkDestinations); | 
| 357     visitor->trace(m_linkedDestinations); | 347     visitor->trace(m_linkedDestinations); | 
| 358 #endif | 348 #endif | 
| 359 } | 349 } | 
| 360 | 350 | 
| 361 } | 351 } | 
| OLD | NEW | 
|---|