KWin
Loading...
Searching...
No Matches
cursorscene.cpp
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#include "scene/cursorscene.h"
8#include "core/output.h"
9#include "core/rendertarget.h"
10#include "core/renderviewport.h"
11#include "effect/effect.h"
12#include "scene/cursoritem.h"
13#include "scene/itemrenderer.h"
14
15namespace KWin
16{
17
18CursorScene::CursorScene(std::unique_ptr<ItemRenderer> &&renderer)
19 : Scene(std::move(renderer))
20{
21 m_rootItem = std::make_unique<CursorItem>(this);
22 setGeometry(m_rootItem->boundingRect().toRect());
23 connect(m_rootItem.get(), &Item::boundingRectChanged, this, [this]() {
24 setGeometry(m_rootItem->boundingRect().toRect());
25 });
26}
27
29{
30 // Avoid accessing m_rootItem if the boundingRectChanged signal is emitted.
31 disconnect(m_rootItem.get(), nullptr, this, nullptr);
32 m_rootItem.reset();
33}
34
35static void resetRepaintsHelper(Item *item, SceneDelegate *delegate)
36{
37 item->resetRepaints(delegate);
38
39 const auto childItems = item->childItems();
40 for (Item *childItem : childItems) {
41 resetRepaintsHelper(childItem, delegate);
42 }
43}
44
46{
47 resetRepaintsHelper(m_rootItem.get(), delegate);
48 m_paintedOutput = delegate->output();
49 return QRegion();
50}
51
55
56void CursorScene::paint(const RenderTarget &renderTarget, const QRegion &region)
57{
58 RenderViewport viewport(QRectF(QPointF(), QSizeF(renderTarget.size()) / m_paintedOutput->scale()), m_paintedOutput->scale(), renderTarget);
59 m_renderer->beginFrame(renderTarget, viewport);
60 m_renderer->renderBackground(renderTarget, viewport, region);
61 m_renderer->renderItem(renderTarget, viewport, m_rootItem.get(), 0, region, WindowPaintData(viewport.projectionMatrix()));
62 m_renderer->endFrame();
63}
64
65} // namespace KWin
66
67#include "moc_cursorscene.cpp"
~CursorScene() override
void paint(const RenderTarget &renderTarget, const QRegion &region) override
QRegion prePaint(SceneDelegate *delegate) override
void postPaint() override
CursorScene(std::unique_ptr< ItemRenderer > &&renderer)
void resetRepaints(SceneDelegate *delegate)
Definition item.cpp:368
QList< Item * > childItems() const
Definition item.cpp:112
void boundingRectChanged()
qreal scale() const
Definition output.cpp:455
QSize size() const
QMatrix4x4 projectionMatrix() const
Output * output() const
Definition scene.cpp:52
void setGeometry(const QRect &rect)
Definition scene.cpp:113
std::unique_ptr< ItemRenderer > m_renderer
Definition scene.h:94