Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickcontext2dtexture_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QQUICKCONTEXT2DTEXTURE_P_H
6#define QQUICKCONTEXT2DTEXTURE_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <private/qtquickglobal_p.h>
20
22
23#include <QtQuick/qsgtexture.h>
26#include <QtCore/QMutex>
27#include <QtCore/QWaitCondition>
28#include <QtCore/QThread>
29
31
34
36{
38public:
44
45 class CanvasChangeEvent : public QEvent {
46 public:
47 CanvasChangeEvent(const QSize &cSize,
48 const QSize &tSize,
49 const QRect &cWindow,
50 const QRect &dRect,
51 bool sm,
52 bool aa)
53 : QEvent(QEvent::Type(QEvent::User + 2))
58 , smooth(sm)
59 , antialiasing(aa)
60 {
61 }
66 bool smooth;
68 };
69
72
74 static QRect tiledRect(const QRectF& window, const QSize& tileSize);
75
76 bool setCanvasSize(const QSize &size);
77 bool setTileSize(const QSize &size);
78 bool setCanvasWindow(const QRect& canvasWindow);
79 void setSmooth(bool smooth);
80 void setAntialiasing(bool antialiasing);
81 bool setDirtyRect(const QRect &dirtyRect);
82 bool canvasDestroyed();
83 void setOnCustomThread(bool is) { m_onCustomThread = is; }
84 bool isOnCustomThread() const { return m_onCustomThread; }
85
86 // Called during sync() on the scene graph thread while GUI is blocked.
87 virtual QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) = 0;
88 bool event(QEvent *e) override;
89
92
93public Q_SLOTS:
94 void canvasChanged(const QSize& canvasSize, const QSize& tileSize, const QRect& canvasWindow, const QRect& dirtyRect, bool smooth, bool antialiasing);
96 void markDirtyTexture();
97 void setItem(QQuickCanvasItem* item);
98 virtual void grabImage(const QRectF& region = QRectF()) = 0;
99
100protected:
101 virtual QVector2D scaleFactor() const { return QVector2D(1, 1); }
102
104 virtual QPaintDevice* beginPainting() {m_painting = true; return nullptr; }
105 virtual void endPainting() {m_painting = false;}
106 virtual QQuickContext2DTile* createTile() const = 0;
107 virtual void compositeTile(QQuickContext2DTile* tile) = 0;
108
109 void clearTiles();
110 virtual QSize adjustedTileSize(const QSize &ts);
111 QRect createTiles(const QRect& window);
112
115 QSurface *m_surface;
116
118
124
127
134 uint m_onCustomThread : 1; // Not GUI and not SGRender
135};
136
137class QSGPlainTexture;
139{
141
142public:
145
147
148 QQuickContext2DTile* createTile() const override;
149 QPaintDevice* beginPainting() override;
150 void endPainting() override;
151 void compositeTile(QQuickContext2DTile* tile) override;
152
153 QSGTexture *textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) override;
154
155public Q_SLOTS:
156 void grabImage(const QRectF& region = QRectF()) override;
157
158private:
159 QImage m_image;
160 QImage m_displayImage;
161 QPainter m_painter;
162};
163
164QT_END_NAMESPACE
165
166#endif // QQUICKCONTEXT2DTEXTURE_P_H
QQuickCanvasContext * rawContext() const
QQuickContext2DTile * createTile() const override
QQuickCanvasItem::RenderTarget renderTarget() const override
void compositeTile(QQuickContext2DTile *tile) override
QPaintDevice * beginPainting() override
QSGTexture * textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window) override
CanvasChangeEvent(const QSize &cSize, const QSize &tSize, const QRect &cWindow, const QRect &dRect, bool sm, bool aa)
bool event(QEvent *e) override
This virtual function receives events to an object and should return true if the event e was recogniz...
void setItem(QQuickCanvasItem *item)
virtual void compositeTile(QQuickContext2DTile *tile)=0
bool setCanvasWindow(const QRect &canvasWindow)
virtual QVector2D scaleFactor() const
QRect createTiles(const QRect &window)
virtual QQuickContext2DTile * createTile() const =0
virtual void grabImage(const QRectF &region=QRectF())=0
void paint(QQuickContext2DCommandBuffer *ccb)
QQuickContext2D::State m_state
virtual QSize adjustedTileSize(const QSize &ts)
bool setCanvasSize(const QSize &size)
bool setTileSize(const QSize &size)
static QRect tiledRect(const QRectF &window, const QSize &tileSize)
virtual QSGTexture * textureForNextFrame(QSGTexture *lastFrame, QQuickWindow *window)=0
void paintWithoutTiles(QQuickContext2DCommandBuffer *ccb)
void setAntialiasing(bool antialiasing)
bool setDirtyRect(const QRect &dirtyRect)
QList< QQuickContext2DTile * > m_tiles
virtual QPaintDevice * beginPainting()
virtual QQuickCanvasItem::RenderTarget renderTarget() const =0
QT_REQUIRE_CONFIG(quick_canvas)