KWin
Loading...
Searching...
No Matches
renderlayer.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
9#include "kwin_export.h"
10
11#include "outputlayer.h"
12
13#include <QMap>
14#include <QObject>
15#include <QPointer>
16#include <QRegion>
17
18namespace KWin
19{
20
21class OutputLayer;
22class RenderLayerDelegate;
23class RenderLoop;
24class Item;
25
36class KWIN_EXPORT RenderLayer : public QObject
37{
38 Q_OBJECT
39
40public:
41 explicit RenderLayer(RenderLoop *loop, RenderLayer *superlayer = nullptr);
42 ~RenderLayer() override;
43
44 OutputLayer *outputLayer() const;
45 void setOutputLayer(OutputLayer *layer);
46
47 RenderLoop *loop() const;
48 RenderLayerDelegate *delegate() const;
49 void setDelegate(std::unique_ptr<RenderLayerDelegate> delegate);
50
51 QList<RenderLayer *> sublayers() const;
52 RenderLayer *superlayer() const;
53 void setSuperlayer(RenderLayer *layer);
54
55 bool isVisible() const;
56 void setVisible(bool visible);
57
58 QPoint mapToGlobal(const QPoint &point) const;
59 QPointF mapToGlobal(const QPointF &point) const;
60 QRegion mapToGlobal(const QRegion &region) const;
61 QRect mapToGlobal(const QRect &rect) const;
62 QRectF mapToGlobal(const QRectF &rect) const;
63
64 QPoint mapFromGlobal(const QPoint &point) const;
65 QPointF mapFromGlobal(const QPointF &point) const;
66 QRegion mapFromGlobal(const QRegion &region) const;
67 QRect mapFromGlobal(const QRect &rect) const;
68 QRectF mapFromGlobal(const QRectF &rect) const;
69
70 QRectF rect() const;
71 QRectF boundingRect() const;
72
73 QRectF geometry() const;
74 void setGeometry(const QRectF &rect);
75
80 void scheduleRepaint(Item *item);
84 bool needsRepaint() const;
85
86 void addRepaint(const QRegion &region);
87 void addRepaint(const QRect &rect);
88 void addRepaint(int x, int y, int width, int height);
89 void addRepaintFull();
90 QRegion repaints() const;
91 void resetRepaints();
92
93private:
94 void addSublayer(RenderLayer *sublayer);
95 void removeSublayer(RenderLayer *sublayer);
96 void updateBoundingRect();
97 void updateEffectiveVisibility();
98 bool computeEffectiveVisibility() const;
99
100 RenderLoop *m_loop;
101 bool m_repaintScheduled = false;
102 std::unique_ptr<RenderLayerDelegate> m_delegate;
103 QRegion m_repaints;
104 QRectF m_boundingRect;
105 QRectF m_geometry;
106 QPointer<OutputLayer> m_outputLayer;
107 RenderLayer *m_superlayer = nullptr;
108 QList<RenderLayer *> m_sublayers;
109 bool m_effectiveVisible = true;
110 bool m_explicitVisible = true;
111};
112
113} // namespace KWin