File indexing completed on 2024-05-19 04:35:22
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