File indexing completed on 2024-05-05 17:59:06

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 
0017 FramesToPaperPrinter::FramesToPaperPrinter() = default;
0018 
0019 FramesToPaperPrinter::~FramesToPaperPrinter()
0020 {
0021     qDeleteAll(mFrameRendererList);
0022 }
0023 
0024 QRect FramesToPaperPrinter::pageRect() const { return mPageRect; }
0025 
0026 void FramesToPaperPrinter::setPaperRect(QRect paperRect) { mPaperRect = paperRect; }
0027 void FramesToPaperPrinter::setPageRect(QRect pageRect) { mPageRect = pageRect; }
0028 
0029 void FramesToPaperPrinter::addFrameRenderer(AbstractFrameRenderer* frameRenderer)
0030 {
0031     mFrameRendererList.append(frameRenderer);
0032 }
0033 
0034 bool FramesToPaperPrinter::print(QPrinter* printer, int firstPageIndex, int lastPageIndex)
0035 {
0036     bool success = true;
0037 
0038     for (AbstractFrameRenderer* frameRenderer : qAsConst(mFrameRendererList)) {
0039         frameRenderer->prepare();
0040     }
0041 
0042     QPainter painter(printer);
0043     int pageIndex = firstPageIndex;
0044     while (true) {
0045         for (AbstractFrameRenderer* frameRenderer : qAsConst(mFrameRendererList)) {
0046             const int x = frameRenderer->x();
0047             const int y = frameRenderer->y();
0048             painter.translate(x, y);
0049             frameRenderer->renderFrame(&painter, pageIndex);
0050             painter.translate(-x, -y);
0051         }
0052 
0053         emit printedPage(pageIndex);
0054         if (pageIndex < lastPageIndex) {
0055             printer->newPage();
0056             ++pageIndex;
0057         } else {
0058             break;
0059         }
0060     }
0061 
0062     return success;
0063 }
0064 
0065 #include "moc_framestopaperprinter.cpp"