OpenCoverage

qquickcontext2dtexture_p.h

Absolute File Name:/home/opencoverage/opencoverage/guest-scripts/qtdeclarative/src/qtdeclarative/src/quick/items/context2d/qquickcontext2dtexture_p.h
Source codeSwitch to Preprocessed file
LineSourceCount
1/****************************************************************************-
2**-
3** Copyright (C) 2016 The Qt Company Ltd.-
4** Contact: https://www.qt.io/licensing/-
5**-
6** This file is part of the QtQuick module of the Qt Toolkit.-
7**-
8** $QT_BEGIN_LICENSE:LGPL$-
9** Commercial License Usage-
10** Licensees holding valid commercial Qt licenses may use this file in-
11** accordance with the commercial license agreement provided with the-
12** Software or, alternatively, in accordance with the terms contained in-
13** a written agreement between you and The Qt Company. For licensing terms-
14** and conditions see https://www.qt.io/terms-conditions. For further-
15** information use the contact form at https://www.qt.io/contact-us.-
16**-
17** GNU Lesser General Public License Usage-
18** Alternatively, this file may be used under the terms of the GNU Lesser-
19** General Public License version 3 as published by the Free Software-
20** Foundation and appearing in the file LICENSE.LGPL3 included in the-
21** packaging of this file. Please review the following information to-
22** ensure the GNU Lesser General Public License version 3 requirements-
23** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.-
24**-
25** GNU General Public License Usage-
26** Alternatively, this file may be used under the terms of the GNU-
27** General Public License version 2.0 or (at your option) the GNU General-
28** Public license version 3 or any later version approved by the KDE Free-
29** Qt Foundation. The licenses are as published by the Free Software-
30** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3-
31** included in the packaging of this file. Please review the following-
32** information to ensure the GNU General Public License requirements will-
33** be met: https://www.gnu.org/licenses/gpl-2.0.html and-
34** https://www.gnu.org/licenses/gpl-3.0.html.-
35**-
36** $QT_END_LICENSE$-
37**-
38****************************************************************************/-
39-
40#ifndef QQUICKCONTEXT2DTEXTURE_P_H-
41#define QQUICKCONTEXT2DTEXTURE_P_H-
42-
43//-
44// W A R N I N G-
45// --------------
46//-
47// This file is not part of the Qt API. It exists purely as an-
48// implementation detail. This header file may change from version to-
49// version without notice, or even be removed.-
50//-
51// We mean it.-
52//-
53-
54#include <private/qtquickglobal_p.h>-
55-
56QT_REQUIRE_CONFIG(quick_canvas);-
57-
58#include <QtQuick/qsgtexture.h>-
59#include "qquickcanvasitem_p.h"-
60#include "qquickcontext2d_p.h"-
61#if QT_CONFIG(opengl)-
62# include <QOpenGLContext>-
63# include <QOpenGLFramebufferObject>-
64#endif-
65#include <QtCore/QMutex>-
66#include <QtCore/QWaitCondition>-
67#include <QtCore/QThread>-
68-
69QT_BEGIN_NAMESPACE-
70-
71class QQuickContext2DTile;-
72class QQuickContext2DCommandBuffer;-
73-
74class QQuickContext2DTexture : public QObject-
75{-
76 Q_OBJECT-
77public:-
78 class PaintEvent : public QEvent {-
79 public:-
80 PaintEvent(QQuickContext2DCommandBuffer *b) : QEvent(QEvent::Type(QEvent::User + 1)), buffer(b) {}
never executed: end of block
0
81 QQuickContext2DCommandBuffer *buffer;-
82 };-
83-
84 class CanvasChangeEvent : public QEvent {-
85 public:-
86 CanvasChangeEvent(const QSize &cSize,-
87 const QSize &tSize,-
88 const QRect &cWindow,-
89 const QRect &dRect,-
90 bool sm,-
91 bool aa)-
92 : QEvent(QEvent::Type(QEvent::User + 2))-
93 , canvasSize(cSize)-
94 , tileSize(tSize)-
95 , canvasWindow(cWindow)-
96 , dirtyRect(dRect)-
97 , smooth(sm)-
98 , antialiasing(aa)-
99 {-
100 }
never executed: end of block
0
101 QSize canvasSize;-
102 QSize tileSize;-
103 QRect canvasWindow;-
104 QRect dirtyRect;-
105 bool smooth;-
106 bool antialiasing;-
107 };-
108-
109 QQuickContext2DTexture();-
110 ~QQuickContext2DTexture();-
111-
112 virtual QQuickCanvasItem::RenderTarget renderTarget() const = 0;-
113 static QRect tiledRect(const QRectF& window, const QSize& tileSize);-
114-
115 bool setCanvasSize(const QSize &size);-
116 bool setTileSize(const QSize &size);-
117 bool setCanvasWindow(const QRect& canvasWindow);-
118 void setSmooth(bool smooth);-
119 void setAntialiasing(bool antialiasing);-
120 bool setDirtyRect(const QRect &dirtyRect);-
121 bool canvasDestroyed();-
122 void setOnCustomThread(bool is) { m_onCustomThread = is; }
never executed: end of block
0
123 bool isOnCustomThread() const { return m_onCustomThread; }
never executed: return m_onCustomThread;
0
124-
125 // Called during sync() on the scene graph thread while GUI is blocked.-
126 virtual QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) = 0;-
127 bool event(QEvent *e) override;-
128#if QT_CONFIG(opengl)-
129 void initializeOpenGL(QOpenGLContext *gl, QOffscreenSurface *s) {-
130 m_gl = gl;-
131 m_surface = s;-
132 }
never executed: end of block
0
133#endif-
134-
135Q_SIGNALS:-
136 void textureChanged();-
137-
138public Q_SLOTS:-
139 void canvasChanged(const QSize& canvasSize, const QSize& tileSize, const QRect& canvasWindow, const QRect& dirtyRect, bool smooth, bool antialiasing);-
140 void paint(QQuickContext2DCommandBuffer *ccb);-
141 void markDirtyTexture();-
142 void setItem(QQuickCanvasItem* item);-
143 virtual void grabImage(const QRectF& region = QRectF()) = 0;-
144-
145protected:-
146 virtual QVector2D scaleFactor() const { return QVector2D(1, 1); }
never executed: return QVector2D(1, 1);
0
147-
148 void paintWithoutTiles(QQuickContext2DCommandBuffer *ccb);-
149 virtual QPaintDevice* beginPainting() {m_painting = true; return nullptr; }
never executed: return nullptr;
0
150 virtual void endPainting() {m_painting = false;}
never executed: end of block
0
151 virtual QQuickContext2DTile* createTile() const = 0;-
152 virtual void compositeTile(QQuickContext2DTile* tile) = 0;-
153-
154 void clearTiles();-
155 virtual QSize adjustedTileSize(const QSize &ts);-
156 QRect createTiles(const QRect& window);-
157-
158 QList<QQuickContext2DTile*> m_tiles;-
159 QQuickContext2D *m_context;-
160#if QT_CONFIG(opengl)-
161 QOpenGLContext *m_gl;-
162#endif-
163 QSurface *m_surface;-
164-
165 QQuickContext2D::State m_state;-
166-
167 QQuickCanvasItem* m_item;-
168 QSize m_canvasSize;-
169 QSize m_tileSize;-
170 QRect m_canvasWindow;-
171 qreal m_canvasDevicePixelRatio;-
172-
173 QMutex m_mutex;-
174 QWaitCondition m_condition;-
175-
176 uint m_canvasWindowChanged : 1;-
177 uint m_dirtyTexture : 1;-
178 uint m_smooth : 1;-
179 uint m_antialiasing : 1;-
180 uint m_tiledCanvas : 1;-
181 uint m_painting : 1;-
182 uint m_onCustomThread : 1; // Not GUI and not SGRender-
183};-
184#if QT_CONFIG(opengl)-
185class QQuickContext2DFBOTexture : public QQuickContext2DTexture-
186{-
187 Q_OBJECT-
188-
189public:-
190 QQuickContext2DFBOTexture();-
191 ~QQuickContext2DFBOTexture();-
192 QQuickContext2DTile* createTile() const override;-
193 QPaintDevice* beginPainting() override;-
194 void endPainting() override;-
195 QRectF normalizedTextureSubRect() const;-
196 QQuickCanvasItem::RenderTarget renderTarget() const override;-
197 void compositeTile(QQuickContext2DTile* tile) override;-
198 QSize adjustedTileSize(const QSize &ts) override;-
199-
200 QSGTexture *textureForNextFrame(QSGTexture *, QQuickWindow *window) override;-
201-
202protected:-
203 QVector2D scaleFactor() const override;-
204-
205public Q_SLOTS:-
206 void grabImage(const QRectF& region = QRectF()) override;-
207-
208private:-
209 bool doMultisampling() const;-
210 QOpenGLFramebufferObject *m_fbo;-
211 QOpenGLFramebufferObject *m_multisampledFbo;-
212 QSize m_fboSize;-
213 QPaintDevice *m_paint_device;-
214-
215-
216 GLuint m_displayTextures[2];-
217 int m_displayTexture;-
218};-
219#endif-
220class QSGPlainTexture;-
221class QQuickContext2DImageTexture : public QQuickContext2DTexture-
222{-
223 Q_OBJECT-
224-
225public:-
226 QQuickContext2DImageTexture();-
227 ~QQuickContext2DImageTexture();-
228-
229 QQuickCanvasItem::RenderTarget renderTarget() const override;-
230-
231 QQuickContext2DTile* createTile() const override;-
232 QPaintDevice* beginPainting() override;-
233 void endPainting() override;-
234 void compositeTile(QQuickContext2DTile* tile) override;-
235-
236 QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) override;-
237-
238public Q_SLOTS:-
239 void grabImage(const QRectF& region = QRectF()) override;-
240-
241private:-
242 QImage m_image;-
243 QImage m_displayImage;-
244 QPainter m_painter;-
245};-
246-
247QT_END_NAMESPACE-
248-
249#endif // QQUICKCONTEXT2DTEXTURE_P_H-
Source codeSwitch to Preprocessed file

Generated by Squish Coco 4.2.0