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()19 FramesToPaperPrinter::~FramesToPaperPrinter()
20 {
21     qDeleteAll(mFrameRendererList);
22 }
23 
pageRect() const24 QRect FramesToPaperPrinter::pageRect() const { return mPageRect; }
25 
setPaperRect(QRect paperRect)26 void FramesToPaperPrinter::setPaperRect(QRect paperRect) { mPaperRect = paperRect; }
setPageRect(QRect pageRect)27 void FramesToPaperPrinter::setPageRect(QRect pageRect) { mPageRect = pageRect; }
28 
addFrameRenderer(AbstractFrameRenderer * frameRenderer)29 void FramesToPaperPrinter::addFrameRenderer(AbstractFrameRenderer* frameRenderer)
30 {
31     mFrameRendererList.append(frameRenderer);
32 }
33 
print(QPrinter * printer,int firstPageIndex,int lastPageIndex)34 bool 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