File indexing completed on 2024-05-12 16:06:48

0001 /*
0002     SPDX-FileCopyrightText: 2007 Albert Astals Cid <aacid@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #ifndef _OKULAR_GSRENDERERTHREAD_H_
0008 #define _OKULAR_GSRENDERERTHREAD_H_
0009 
0010 #include <QMutex>
0011 #include <QQueue>
0012 #include <QSemaphore>
0013 #include <QString>
0014 #include <QThread>
0015 
0016 #include <libspectre/spectre.h>
0017 
0018 class QImage;
0019 class GSGenerator;
0020 
0021 namespace Okular
0022 {
0023 class PixmapRequest;
0024 }
0025 
0026 struct GSRendererThreadRequest {
0027     explicit GSRendererThreadRequest(GSGenerator *_owner)
0028         : owner(_owner)
0029         , request(nullptr)
0030         , spectrePage(nullptr)
0031         , textAAbits(1)
0032         , graphicsAAbits(1)
0033         , magnify(1.0)
0034         , orientation(0)
0035         , platformFonts(true)
0036     {
0037     }
0038 
0039     GSGenerator *owner;
0040     Okular::PixmapRequest *request;
0041     SpectrePage *spectrePage;
0042     int textAAbits;
0043     int graphicsAAbits;
0044     double magnify;
0045     int orientation;
0046     bool platformFonts;
0047 };
0048 Q_DECLARE_TYPEINFO(GSRendererThreadRequest, Q_MOVABLE_TYPE);
0049 
0050 class GSRendererThread : public QThread
0051 {
0052     Q_OBJECT
0053 public:
0054     static GSRendererThread *getCreateRenderer();
0055 
0056     ~GSRendererThread() override;
0057 
0058     void addRequest(const GSRendererThreadRequest &req);
0059 
0060 Q_SIGNALS:
0061     void imageDone(QImage *image, Okular::PixmapRequest *request);
0062 
0063 private:
0064     GSRendererThread();
0065 
0066     QSemaphore m_semaphore;
0067 
0068     static GSRendererThread *theRenderer;
0069 
0070     void run() override;
0071 
0072     SpectreRenderContext *m_renderContext;
0073     QQueue<GSRendererThreadRequest> m_queue;
0074     QMutex m_queueMutex;
0075 };
0076 
0077 #endif