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
qgraphicseffect_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 QGRAPHICSEFFECT_P_H
6#define QGRAPHICSEFFECT_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 for the convenience
13// of qapplication_*.cpp, qwidget*.cpp and qfiledialog.cpp. This header
14// file may change from version to version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
21
22#include <QPixmapCache>
23
24#include <private/qobject_p.h>
25#include <private/qpixmapfilter_p.h>
26
28
29QT_BEGIN_NAMESPACE
30
31class QGraphicsEffectSourcePrivate;
32class Q_WIDGETS_EXPORT QGraphicsEffectSource : public QObject
33{
34 Q_OBJECT
35public:
36 ~QGraphicsEffectSource();
37 const QGraphicsItem *graphicsItem() const;
38 const QWidget *widget() const;
39 const QStyleOption *styleOption() const;
40
41 bool isPixmap() const;
42 void draw(QPainter *painter);
43 void update();
44
45 QRectF boundingRect(Qt::CoordinateSystem coordinateSystem = Qt::LogicalCoordinates) const;
46 QRect deviceRect() const;
47 QPixmap pixmap(Qt::CoordinateSystem system = Qt::LogicalCoordinates,
48 QPoint *offset = nullptr,
49 QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToEffectiveBoundingRect) const;
50
51protected:
52 QGraphicsEffectSource(QGraphicsEffectSourcePrivate &dd, QObject *parent = nullptr);
53
54private:
55 Q_DECLARE_PRIVATE(QGraphicsEffectSource)
56 Q_DISABLE_COPY_MOVE(QGraphicsEffectSource)
57 friend class QGraphicsEffect;
58 friend class QGraphicsEffectPrivate;
59 friend class QGraphicsScenePrivate;
60 friend class QGraphicsItem;
61 friend class QGraphicsItemPrivate;
62 friend class QWidget;
63 friend class QWidgetPrivate;
64};
65
67{
68 Q_DECLARE_PUBLIC(QGraphicsEffectSource)
69public:
75
82
84 virtual void detach() = 0;
85 virtual QRectF boundingRect(Qt::CoordinateSystem system) const = 0;
86 virtual QRect deviceRect() const = 0;
87 virtual const QGraphicsItem *graphicsItem() const = 0;
88 virtual const QWidget *widget() const = 0;
89 virtual const QStyleOption *styleOption() const = 0;
90 virtual void draw(QPainter *p) = 0;
91 virtual void update() = 0;
92 virtual bool isPixmap() const = 0;
93 virtual QPixmap pixmap(Qt::CoordinateSystem system, QPoint *offset = nullptr,
94 QGraphicsEffect::PixmapPadMode mode = QGraphicsEffect::PadToTransparentBorder) const = 0;
95 virtual void effectBoundingRectChanged() = 0;
96
97 void setCachedOffset(const QPoint &offset);
98 void invalidateCache(InvalidateReason reason = SourceChanged) const;
99 Qt::CoordinateSystem currentCachedSystem() const { return m_cachedSystem; }
101
103 friend class QGraphicsItem;
104 friend class QGraphicsItemPrivate;
105
106private:
107 mutable Qt::CoordinateSystem m_cachedSystem;
109 mutable QPoint m_cachedOffset;
110 mutable QPixmapCache::Key m_cacheKey;
111};
112
113class Q_WIDGETS_EXPORT QGraphicsEffectPrivate : public QObjectPrivate
114{
115 Q_DECLARE_PUBLIC(QGraphicsEffect)
116public:
117 QGraphicsEffectPrivate() : source(nullptr), isEnabled(1) {}
118 ~QGraphicsEffectPrivate();
119
120 inline void setGraphicsEffectSource(QGraphicsEffectSource *newSource)
121 {
122 QGraphicsEffect::ChangeFlags flags;
123 if (source) {
124 flags |= QGraphicsEffect::SourceDetached;
125 source->d_func()->effectBoundingRectChanged();
126 source->d_func()->invalidateCache();
127 source->d_func()->detach();
128 delete source;
129 }
130 source = newSource;
131 if (newSource)
132 flags |= QGraphicsEffect::SourceAttached;
133 q_func()->sourceChanged(flags);
134 }
135
136 QGraphicsEffectSource *source;
137 QRectF boundingRect;
138 quint32 isEnabled : 1;
139 quint32 padding : 31; // feel free to use
140};
141
142
144{
145 Q_DECLARE_PUBLIC(QGraphicsColorizeEffect)
146public:
153
157};
158
160{
161 Q_DECLARE_PUBLIC(QGraphicsBlurEffect)
162public:
165
167};
168
178
193
194QT_END_NAMESPACE
195
196#endif // QGRAPHICSEFFECT_P_H
void setCachedOffset(const QPoint &offset)
virtual const QGraphicsItem * graphicsItem() const =0
virtual bool isPixmap() const =0
virtual QPixmap pixmap(Qt::CoordinateSystem system, QPoint *offset=nullptr, QGraphicsEffect::PixmapPadMode mode=QGraphicsEffect::PadToTransparentBorder) const =0
void invalidateCache(InvalidateReason reason=SourceChanged) const
virtual QRectF boundingRect(Qt::CoordinateSystem system) const =0
Qt::CoordinateSystem currentCachedSystem() const
virtual const QStyleOption * styleOption() const =0
virtual void draw(QPainter *p)=0
virtual QRect deviceRect() const =0
virtual void effectBoundingRectChanged()=0
virtual const QWidget * widget() const =0
The QGraphicsEffectSource class represents the source on which a QGraphicsEffect is installed on.
friend class QPainter
QT_REQUIRE_CONFIG(animation)
QT_REQUIRE_CONFIG(graphicseffect)