KWin
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
scene.h
Go to the documentation of this file.
1/*
2 SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5*/
6
7#pragma once
8
10
11#include <QObject>
12
13#include <memory>
14
15namespace KWin
16{
17
18class ItemRenderer;
19class Output;
20class Scene;
21
22class KWIN_EXPORT SceneDelegate : public RenderLayerDelegate
23{
24public:
25 explicit SceneDelegate(Scene *scene, Output *output);
26 ~SceneDelegate() override;
27
28 Output *output() const;
29 qreal scale() const;
30 QRect viewport() const;
31
32 SurfaceItem *scanoutCandidate() const override;
33 void frame(OutputFrame *frame) override;
34 QRegion prePaint() override;
35 void postPaint() override;
36 void paint(const RenderTarget &renderTarget, const QRegion &region) override;
37
38private:
39 Scene *m_scene;
40 Output *m_output = nullptr;
41};
42
43class KWIN_EXPORT Scene : public QObject
44{
45 Q_OBJECT
46
47public:
48 // Flags controlling how painting is done.
49 enum {
50 // WindowItem (or at least part of it) will be painted opaque.
51 PAINT_WINDOW_OPAQUE = 1 << 0,
52 // WindowItem (or at least part of it) will be painted translucent.
53 PAINT_WINDOW_TRANSLUCENT = 1 << 1,
54 // WindowItem will be painted with transformed geometry.
55 PAINT_WINDOW_TRANSFORMED = 1 << 2,
56 // Paint only a region of the screen (can be optimized, cannot
57 // be used together with TRANSFORMED flags).
58 PAINT_SCREEN_REGION = 1 << 3,
59 // Whole screen will be painted with transformed geometry.
60 PAINT_SCREEN_TRANSFORMED = 1 << 4,
61 // At least one window will be painted with transformed geometry.
62 PAINT_SCREEN_WITH_TRANSFORMED_WINDOWS = 1 << 5,
63 // Clear whole background as the very first step, without optimizing it
64 PAINT_SCREEN_BACKGROUND_FIRST = 1 << 6,
65 };
66
67 explicit Scene(std::unique_ptr<ItemRenderer> &&renderer);
68 ~Scene() override;
69
70 ItemRenderer *renderer() const;
71
72 void addRepaint(const QRegion &region);
73 void addRepaint(int x, int y, int width, int height);
74 void addRepaintFull();
75 virtual QRegion damage() const;
76
77 QRect geometry() const;
78 void setGeometry(const QRect &rect);
79
80 QList<SceneDelegate *> delegates() const;
81 void addDelegate(SceneDelegate *delegate);
82 void removeDelegate(SceneDelegate *delegate);
83
84 virtual SurfaceItem *scanoutCandidate() const;
85 virtual QRegion prePaint(SceneDelegate *delegate) = 0;
86 virtual void postPaint() = 0;
87 virtual void paint(const RenderTarget &renderTarget, const QRegion &region) = 0;
88 virtual void frame(SceneDelegate *delegate, OutputFrame *frame);
89
90Q_SIGNALS:
92
93protected:
94 std::unique_ptr<ItemRenderer> m_renderer;
95 QList<SceneDelegate *> m_delegates;
97};
98
99} // namespace KWin
virtual void paint(const RenderTarget &renderTarget, const QRegion &region)=0
QRect m_geometry
Definition scene.h:96
virtual void postPaint()=0
QList< SceneDelegate * > m_delegates
Definition scene.h:95
std::unique_ptr< ItemRenderer > m_renderer
Definition scene.h:94
virtual QRegion prePaint(SceneDelegate *delegate)=0
void delegateRemoved(SceneDelegate *delegate)