1 /* 2 This file is part of the Okteta Kasten module, made within the KDE community. 3 4 SPDX-FileCopyrightText: 2007-2008 Friedrich W. H. Kossebau <kossebau@kde.org> 5 6 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 7 */ 8 9 #include "framestopaperprinter.hpp" 10 11 // lib 12 #include "abstractframerenderer.hpp" 13 // Qt 14 #include <QPainter> 15 #include <QPrinter> 16 17 FramesToPaperPrinter::FramesToPaperPrinter() = default; 18 ~FramesToPaperPrinter()19FramesToPaperPrinter::~FramesToPaperPrinter() 20 { 21 qDeleteAll(mFrameRendererList); 22 } 23 pageRect() const24QRect FramesToPaperPrinter::pageRect() const { return mPageRect; } 25 setPaperRect(QRect paperRect)26void FramesToPaperPrinter::setPaperRect(QRect paperRect) { mPaperRect = paperRect; } setPageRect(QRect pageRect)27void FramesToPaperPrinter::setPageRect(QRect pageRect) { mPageRect = pageRect; } 28 addFrameRenderer(AbstractFrameRenderer * frameRenderer)29void FramesToPaperPrinter::addFrameRenderer(AbstractFrameRenderer* frameRenderer) 30 { 31 mFrameRendererList.append(frameRenderer); 32 } 33 print(QPrinter * printer,int firstPageIndex,int lastPageIndex)34bool FramesToPaperPrinter::print(QPrinter* printer, int firstPageIndex, int lastPageIndex) 35 { 36 bool success = true; 37 38 for (AbstractFrameRenderer* frameRenderer : qAsConst(mFrameRendererList)) { 39 frameRenderer->prepare(); 40 } 41 42 QPainter painter(printer); 43 int pageIndex = firstPageIndex; 44 while (true) { 45 for (AbstractFrameRenderer* frameRenderer : qAsConst(mFrameRendererList)) { 46 const int x = frameRenderer->x(); 47 const int y = frameRenderer->y(); 48 painter.translate(x, y); 49 frameRenderer->renderFrame(&painter, pageIndex); 50 painter.translate(-x, -y); 51 } 52 53 emit printedPage(pageIndex); 54 if (pageIndex < lastPageIndex) { 55 printer->newPage(); 56 ++pageIndex; 57 } else { 58 break; 59 } 60 } 61 62 return success; 63 } 64