File indexing completed on 2024-05-19 16:34:45
0001 /* 0002 SPDX-FileCopyrightText: 2022 Vlad Zahorodnii <vlad.zahorodnii@kde.org> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "scene/cursorscene.h" 0008 #include "core/rendertarget.h" 0009 #include "scene/cursoritem.h" 0010 #include "scene/itemrenderer.h" 0011 0012 namespace KWin 0013 { 0014 0015 CursorScene::CursorScene(std::unique_ptr<ItemRenderer> &&renderer) 0016 : Scene(std::move(renderer)) 0017 { 0018 } 0019 0020 CursorScene::~CursorScene() 0021 { 0022 // Avoid accessing m_rootItem if the boundingRectChanged signal is emitted. 0023 disconnect(m_rootItem.get(), nullptr, this, nullptr); 0024 m_rootItem.reset(); 0025 } 0026 0027 void CursorScene::initialize() 0028 { 0029 m_rootItem = std::make_unique<CursorItem>(this); 0030 setGeometry(m_rootItem->boundingRect().toRect()); 0031 connect(m_rootItem.get(), &Item::boundingRectChanged, this, [this]() { 0032 setGeometry(m_rootItem->boundingRect().toRect()); 0033 }); 0034 } 0035 0036 static void resetRepaintsHelper(Item *item, SceneDelegate *delegate) 0037 { 0038 item->resetRepaints(delegate); 0039 0040 const auto childItems = item->childItems(); 0041 for (Item *childItem : childItems) { 0042 resetRepaintsHelper(childItem, delegate); 0043 } 0044 } 0045 0046 void CursorScene::prePaint(SceneDelegate *delegate) 0047 { 0048 resetRepaintsHelper(m_rootItem.get(), delegate); 0049 } 0050 0051 void CursorScene::postPaint() 0052 { 0053 } 0054 0055 void CursorScene::paint(RenderTarget *renderTarget, const QRegion ®ion) 0056 { 0057 m_renderer->setRenderTargetRect(QRect(QPoint(0, 0), renderTarget->size() / renderTarget->devicePixelRatio())); 0058 m_renderer->setRenderTargetScale(renderTarget->devicePixelRatio()); 0059 0060 m_renderer->beginFrame(renderTarget); 0061 m_renderer->renderBackground(region); 0062 m_renderer->renderItem(m_rootItem.get(), 0, region, WindowPaintData(m_renderer->renderTargetProjectionMatrix())); 0063 m_renderer->endFrame(); 0064 } 0065 0066 } // namespace KWin