File indexing completed on 2024-05-05 10:17:44
0001 /* 0002 This file is part of the Okteta Kasten module, made within the KDE community. 0003 0004 SPDX-FileCopyrightText: 2007-2008 Friedrich W. H. Kossebau <kossebau@kde.org> 0005 0006 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0007 */ 0008 0009 #include "framestopaperprinter.hpp" 0010 0011 // lib 0012 #include "abstractframerenderer.hpp" 0013 // Qt 0014 #include <QPainter> 0015 #include <QPrinter> 0016 // Std 0017 #include <utility> 0018 0019 FramesToPaperPrinter::FramesToPaperPrinter() = default; 0020 0021 FramesToPaperPrinter::~FramesToPaperPrinter() 0022 { 0023 qDeleteAll(mFrameRendererList); 0024 } 0025 0026 QRect FramesToPaperPrinter::pageRect() const { return mPageRect; } 0027 0028 void FramesToPaperPrinter::setPaperRect(QRect paperRect) { mPaperRect = paperRect; } 0029 void FramesToPaperPrinter::setPageRect(QRect pageRect) { mPageRect = pageRect; } 0030 0031 void FramesToPaperPrinter::addFrameRenderer(AbstractFrameRenderer* frameRenderer) 0032 { 0033 mFrameRendererList.append(frameRenderer); 0034 } 0035 0036 bool FramesToPaperPrinter::print(QPrinter* printer, int firstPageIndex, int lastPageIndex) 0037 { 0038 bool success = true; 0039 0040 for (AbstractFrameRenderer* frameRenderer : std::as_const(mFrameRendererList)) { 0041 frameRenderer->prepare(); 0042 } 0043 0044 QPainter painter(printer); 0045 int pageIndex = firstPageIndex; 0046 while (true) { 0047 for (AbstractFrameRenderer* frameRenderer : std::as_const(mFrameRendererList)) { 0048 const int x = frameRenderer->x(); 0049 const int y = frameRenderer->y(); 0050 painter.translate(x, y); 0051 frameRenderer->renderFrame(&painter, pageIndex); 0052 painter.translate(-x, -y); 0053 } 0054 0055 Q_EMIT printedPage(pageIndex); 0056 if (pageIndex < lastPageIndex) { 0057 printer->newPage(); 0058 ++pageIndex; 0059 } else { 0060 break; 0061 } 0062 } 0063 0064 return success; 0065 } 0066 0067 #include "moc_framestopaperprinter.cpp"