File indexing completed on 2024-04-21 05:53:49

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"