KWin
Loading...
Searching...
No Matches
surfaceitem.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2021 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
10#include "core/output.h"
11#include "scene/item.h"
12
13#include <deque>
14
15namespace KWin
16{
17
18class SurfacePixmap;
19class Window;
20
24class KWIN_EXPORT SurfaceItem : public Item
25{
26 Q_OBJECT
27
28public:
29 QSizeF destinationSize() const;
30 void setDestinationSize(const QSizeF &size);
31
32 QRectF bufferSourceBox() const;
33 void setBufferSourceBox(const QRectF &box);
34
35 OutputTransform bufferTransform() const;
36 void setBufferTransform(OutputTransform transform);
37
38 QSize bufferSize() const;
39 void setBufferSize(const QSize &size);
40
41 QRegion mapFromBuffer(const QRegion &region) const;
42
43 void addDamage(const QRegion &region);
44 void resetDamage();
45 QRegion damage() const;
46
47 void discardPixmap();
48 void updatePixmap();
49 void destroyPixmap();
50
51 SurfacePixmap *pixmap() const;
52 SurfacePixmap *previousPixmap() const;
53
54 void referencePreviousPixmap();
55 void unreferencePreviousPixmap();
56
57 virtual ContentType contentType() const;
58
59 virtual void freeze();
60
61 std::chrono::nanoseconds frameTimeEstimation() const;
62
63Q_SIGNALS:
64 void damaged();
65
66protected:
67 explicit SurfaceItem(Scene *scene, Item *parent = nullptr);
68
69 virtual std::unique_ptr<SurfacePixmap> createPixmap() = 0;
70 void preprocess() override;
71 WindowQuadList buildQuads() const override;
72
73 QRegion m_damage;
79 std::unique_ptr<SurfacePixmap> m_pixmap;
80 std::unique_ptr<SurfacePixmap> m_previousPixmap;
81 int m_referencePixmapCounter = 0;
82 std::deque<std::chrono::nanoseconds> m_lastDamageTimeDiffs;
83 std::optional<std::chrono::steady_clock::time_point> m_lastDamage;
84 std::chrono::nanoseconds m_frameTimeEstimation = std::chrono::days(1000);
85};
86
87class KWIN_EXPORT SurfaceTexture
88{
89public:
90 virtual ~SurfaceTexture();
91
92 virtual bool isValid() const = 0;
93};
94
95class KWIN_EXPORT SurfacePixmap : public QObject
96{
97 Q_OBJECT
98
99public:
100 explicit SurfacePixmap(std::unique_ptr<SurfaceTexture> &&texture, QObject *parent = nullptr);
101
102 GraphicsBuffer *buffer() const;
103 void setBuffer(GraphicsBuffer *buffer);
104
105 GraphicsBufferOrigin bufferOrigin() const;
106 void setBufferOrigin(GraphicsBufferOrigin origin);
107
108 SurfaceTexture *texture() const;
109
110 bool hasAlphaChannel() const;
111 QSize size() const;
112
113 bool isDiscarded() const;
114 void markAsDiscarded();
115
116 virtual void create() = 0;
117 virtual void update();
118
119 virtual bool isValid() const = 0;
120
121protected:
123 GraphicsBufferOrigin m_bufferOrigin = GraphicsBufferOrigin::TopLeft;
124 QSize m_size;
125 bool m_hasAlphaChannel = false;
126
127private:
128 std::unique_ptr<SurfaceTexture> m_texture;
129 bool m_isDiscarded = false;
130};
131
132} // namespace KWin
std::unique_ptr< SurfacePixmap > m_pixmap
Definition surfaceitem.h:79
virtual std::unique_ptr< SurfacePixmap > createPixmap()=0
QSizeF m_destinationSize
Definition surfaceitem.h:78
QRectF m_bufferSourceBox
Definition surfaceitem.h:76
OutputTransform m_surfaceToBufferTransform
Definition surfaceitem.h:75
std::unique_ptr< SurfacePixmap > m_previousPixmap
Definition surfaceitem.h:80
std::deque< std::chrono::nanoseconds > m_lastDamageTimeDiffs
Definition surfaceitem.h:82
std::optional< std::chrono::steady_clock::time_point > m_lastDamage
Definition surfaceitem.h:83
OutputTransform m_bufferToSurfaceTransform
Definition surfaceitem.h:74
GraphicsBufferRef m_bufferRef
virtual void create()=0
virtual bool isValid() const =0
virtual bool isValid() const =0
GraphicsBufferOrigin
ContentType
Definition globals.h:284