KWin
Loading...
Searching...
No Matches
surface_p.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2014 Martin Gräßlin <mgraesslin@kde.org>
3 SPDX-FileCopyrightText: 2020 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
6*/
7#pragma once
8
10#include "surface.h"
11// Qt
12#include <QHash>
13#include <QList>
14#include <QPointer>
15// Wayland
16#include "qwayland-server-wayland.h"
17// C++
18#include <deque>
19#include <optional>
20
21namespace KWin
22{
23class IdleInhibitorV1Interface;
24class ViewportInterface;
25class ContentTypeV1Interface;
26class TearingControlV1Interface;
27class FractionalScaleV1Interface;
28class FrogColorManagementSurfaceV1;
29class PresentationTimeFeedback;
30class XXColorSurfaceV2;
31
33{
35 SurfaceState(const SurfaceState &cpy) = delete;
38
39 void mergeInto(SurfaceState *target);
40
41 quint32 serial = 0;
42
43 QRegion damage = QRegion();
44 QRegion bufferDamage = QRegion();
45 QRegion opaque = QRegion();
46 QRegion input = infiniteRegion();
47 bool inputIsSet = false;
48 bool opaqueIsSet = false;
49 bool bufferIsSet = false;
50 bool shadowIsSet = false;
51 bool blurIsSet = false;
52 bool contrastIsSet = false;
53 bool slideIsSet = false;
56 bool bufferScaleIsSet = false;
58 bool contentTypeIsSet = false;
61 qint32 bufferScale = 1;
64 QPoint offset = QPoint();
65 QPointer<GraphicsBuffer> buffer;
66 QPointer<ShadowInterface> shadow;
67 QPointer<BlurInterface> blur;
68 QPointer<ContrastInterface> contrast;
69 QPointer<SlideInterface> slide;
73 std::unique_ptr<PresentationTimeFeedback> presentationFeedback;
74
75 struct
76 {
77 // Subsurfaces are stored in two lists. The below list contains subsurfaces that
78 // are below their parent surface; the above list contains subsurfaces that are
79 // placed above the parent surface.
80 QList<SubSurfaceInterface *> below;
81 QList<SubSurfaceInterface *> above;
82
83 // Subsurface position is here becase it is a part of the parent surface's state.
84 QHash<SubSurfaceInterface *, QPoint> position;
86
87 struct
88 {
89 QRectF sourceGeometry = QRectF();
90 QSize destinationSize = QSize();
91 bool sourceGeometryIsSet = false;
94};
95
96class SurfaceInterfacePrivate : public QtWaylandServer::wl_surface
97{
98public:
100 {
101 return surface->d.get();
102 }
103
105
110 void setShadow(const QPointer<ShadowInterface> &shadow);
111 void setBlur(const QPointer<BlurInterface> &blur);
112 void setContrast(const QPointer<ContrastInterface> &contrast);
113 void setSlide(const QPointer<SlideInterface> &slide);
118
119 QRectF computeBufferSourceBox() const;
120 void applyState(SurfaceState *next);
121
122 bool computeEffectiveMapped() const;
124
129 bool contains(const QPointF &position) const;
130 bool inputContains(const QPointF &position) const;
131 QRegion mapToBuffer(const QRegion &region) const;
132
135 SurfaceRole *role = nullptr;
136 std::unique_ptr<SurfaceState> current;
137 std::unique_ptr<SurfaceState> pending;
138 QSize bufferSize = QSize(0, 0);
140 QSizeF surfaceSize = QSizeF(0, 0);
141
142 QRegion inputRegion;
146 bool mapped = false;
147 qreal scaleOverride = 1.;
149
152
153 QList<OutputInterface *> outputs;
154 QPointer<OutputInterface> primaryOutput;
155 std::optional<qreal> preferredBufferScale;
156 std::optional<OutputTransform> preferredBufferTransform;
157 std::optional<ColorDescription> preferredColorDescription;
158
161 QHash<OutputInterface *, QMetaObject::Connection> outputDestroyedConnections;
162 QHash<OutputInterface *, QMetaObject::Connection> outputBoundConnections;
163
164 QList<IdleInhibitorV1Interface *> idleInhibitors;
166 std::unique_ptr<LinuxDmaBufV1Feedback> dmabufFeedbackV1;
167 QPointer<ContentTypeV1Interface> contentTypeInterface;
173
174 struct
175 {
177 std::unique_ptr<Transaction> transaction;
179
180 std::vector<std::unique_ptr<PresentationTimeFeedback>> pendingPresentationFeedbacks;
181
182protected:
183 void surface_destroy_resource(Resource *resource) override;
184 void surface_destroy(Resource *resource) override;
185 void surface_attach(Resource *resource, struct ::wl_resource *buffer, int32_t x, int32_t y) override;
186 void surface_damage(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
187 void surface_frame(Resource *resource, uint32_t callback) override;
188 void surface_set_opaque_region(Resource *resource, struct ::wl_resource *region) override;
189 void surface_set_input_region(Resource *resource, struct ::wl_resource *region) override;
190 void surface_commit(Resource *resource) override;
191 void surface_set_buffer_transform(Resource *resource, int32_t transform) override;
192 void surface_set_buffer_scale(Resource *resource, int32_t scale) override;
193 void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override;
194 void surface_offset(Resource *resource, int32_t x, int32_t y) override;
195
196private:
197 QMetaObject::Connection constrainsOneShotConnection;
198 QMetaObject::Connection constrainsUnboundConnection;
199};
200
201} // namespace KWin
Convenient Class which represents a wl_client.
static const ColorDescription sRGB
Definition colorspace.h:132
Resource representing a wl_surface.
Definition surface.h:80
QRectF computeBufferSourceBox() const
Definition surface.cpp:484
void surface_commit(Resource *resource) override
Definition surface.cpp:343
ClientConnection * client
Definition surface_p.h:169
void setContrast(const QPointer< ContrastInterface > &contrast)
Definition surface.cpp:195
void installIdleInhibitor(IdleInhibitorV1Interface *inhibitor)
Definition surface.cpp:257
void removeIdleInhibitor(IdleInhibitorV1Interface *inhibitor)
Definition surface.cpp:265
void surface_set_input_region(Resource *resource, struct ::wl_resource *region) override
Definition surface.cpp:336
void setBlur(const QPointer< BlurInterface > &blur)
Definition surface.cpp:183
void surface_set_buffer_scale(Resource *resource, int32_t scale) override
Definition surface.cpp:390
bool raiseChild(SubSurfaceInterface *subsurface, SurfaceInterface *anchor)
Definition surface.cpp:123
ConfinedPointerV1Interface * confinedPointer
Definition surface_p.h:160
QList< OutputInterface * > outputs
Definition surface_p.h:153
std::unique_ptr< Transaction > transaction
Definition surface_p.h:177
bool contains(const QPointF &position) const
Definition surface.cpp:753
void surface_destroy(Resource *resource) override
Definition surface.cpp:279
std::unique_ptr< LinuxDmaBufV1Feedback > dmabufFeedbackV1
Definition surface_p.h:166
FractionalScaleV1Interface * fractionalScaleExtension
Definition surface_p.h:168
XXColorSurfaceV2 * xxColorSurface
Definition surface_p.h:172
FrogColorManagementSurfaceV1 * frogColorManagement
Definition surface_p.h:171
std::vector< std::unique_ptr< PresentationTimeFeedback > > pendingPresentationFeedbacks
Definition surface_p.h:180
std::unique_ptr< SurfaceState > current
Definition surface_p.h:136
void surface_frame(Resource *resource, uint32_t callback) override
Definition surface.cpp:311
std::optional< qreal > preferredBufferScale
Definition surface_p.h:155
void setShadow(const QPointer< ShadowInterface > &shadow)
Definition surface.cpp:177
void removeChild(SubSurfaceInterface *subsurface)
Definition surface.cpp:96
bool computeEffectiveMapped() const
Definition surface.cpp:717
std::unique_ptr< SurfaceState > pending
Definition surface_p.h:137
void surface_damage(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override
Definition surface.cpp:306
CompositorInterface * compositor
Definition surface_p.h:133
void surface_destroy_resource(Resource *resource) override
Definition surface.cpp:273
static SurfaceInterfacePrivate * get(SurfaceInterface *surface)
Definition surface_p.h:99
QHash< OutputInterface *, QMetaObject::Connection > outputBoundConnections
Definition surface_p.h:162
QRegion mapToBuffer(const QRegion &region) const
Definition surface.cpp:767
void installPointerConstraint(LockedPointerV1Interface *lock)
Definition surface.cpp:201
bool inputContains(const QPointF &position) const
Definition surface.cpp:762
GraphicsBufferRef bufferRef
Definition surface_p.h:144
void surface_damage_buffer(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height) override
Definition surface.cpp:400
void surface_attach(Resource *resource, struct ::wl_resource *buffer, int32_t x, int32_t y) override
Definition surface.cpp:284
TearingControlV1Interface * tearing
Definition surface_p.h:170
LockedPointerV1Interface * lockedPointer
Definition surface_p.h:159
QList< IdleInhibitorV1Interface * > idleInhibitors
Definition surface_p.h:164
SurfaceInterfacePrivate(SurfaceInterface *q)
Definition surface.cpp:56
QPointer< OutputInterface > primaryOutput
Definition surface_p.h:154
void addChild(SubSurfaceInterface *subsurface)
Definition surface.cpp:63
void surface_set_buffer_transform(Resource *resource, int32_t transform) override
Definition surface.cpp:380
SubSurfaceInterface * handle
Definition surface_p.h:176
QHash< OutputInterface *, QMetaObject::Connection > outputDestroyedConnections
Definition surface_p.h:161
void surface_set_opaque_region(Resource *resource, struct ::wl_resource *region) override
Definition surface.cpp:329
struct KWin::SurfaceInterfacePrivate::@30 subsurface
void surface_offset(Resource *resource, int32_t x, int32_t y) override
Definition surface.cpp:405
void applyState(SurfaceState *next)
Definition surface.cpp:592
QPointer< ContentTypeV1Interface > contentTypeInterface
Definition surface_p.h:167
bool lowerChild(SubSurfaceInterface *subsurface, SurfaceInterface *anchor)
Definition surface.cpp:150
std::optional< OutputTransform > preferredBufferTransform
Definition surface_p.h:156
void setSlide(const QPointer< SlideInterface > &slide)
Definition surface.cpp:189
std::optional< ColorDescription > preferredColorDescription
Definition surface_p.h:157
ViewportInterface * viewportExtension
Definition surface_p.h:165
KWIN_EXPORT QRect infiniteRegion()
Definition globals.h:234
PresentationModeHint
Definition globals.h:299
ContentType
Definition globals.h:284
bool destinationSizeIsSet
Definition surface_p.h:92
QPointer< ContrastInterface > contrast
Definition surface_p.h:68
struct KWin::SurfaceState::@29 viewport
void mergeInto(SurfaceState *target)
Definition surface.cpp:514
bool colorDescriptionIsSet
Definition surface_p.h:60
QPointer< SlideInterface > slide
Definition surface_p.h:69
SurfaceState(const SurfaceState &cpy)=delete
OutputTransform bufferTransform
Definition surface_p.h:62
ContentType contentType
Definition surface_p.h:70
bool presentationModeHintIsSet
Definition surface_p.h:59
PresentationModeHint presentationHint
Definition surface_p.h:71
QRectF sourceGeometry
Definition surface_p.h:89
struct KWin::SurfaceState::@28 subsurface
QHash< SubSurfaceInterface *, QPoint > position
Definition surface_p.h:84
QPointer< ShadowInterface > shadow
Definition surface_p.h:66
QPointer< BlurInterface > blur
Definition surface_p.h:67
QList< SubSurfaceInterface * > below
Definition surface_p.h:80
ColorDescription colorDescription
Definition surface_p.h:72
bool bufferTransformIsSet
Definition surface_p.h:57
bool subsurfacePositionChanged
Definition surface_p.h:55
wl_list frameCallbacks
Definition surface_p.h:63
QPointer< GraphicsBuffer > buffer
Definition surface_p.h:65
QRegion bufferDamage
Definition surface_p.h:44
std::unique_ptr< PresentationTimeFeedback > presentationFeedback
Definition surface_p.h:73
bool subsurfaceOrderChanged
Definition surface_p.h:54
SurfaceState & operator=(SurfaceState &&mv)=default
QList< SubSurfaceInterface * > above
Definition surface_p.h:81