KWin
Loading...
Searching...
No Matches
cursoritem.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/cursoritem.h"
8#include "cursor.h"
9#include "cursorsource.h"
10#include "effect/effect.h"
11#include "scene/imageitem.h"
12#include "scene/itemrenderer.h"
13#include "scene/scene.h"
15
16namespace KWin
17{
18
20 : Item(scene, parent)
21{
22 refresh();
23 connect(Cursors::self(), &Cursors::currentCursorChanged, this, &CursorItem::refresh);
24}
25
29
30void CursorItem::refresh()
31{
32 const CursorSource *source = Cursors::self()->currentCursor()->source();
33 if (auto surfaceSource = qobject_cast<const SurfaceCursorSource *>(source)) {
34 setSurface(surfaceSource->surface());
35 } else if (auto shapeSource = qobject_cast<const ShapeCursorSource *>(source)) {
36 setImage(shapeSource->image());
37 }
38}
39
40void CursorItem::setSurface(SurfaceInterface *surface)
41{
42 m_imageItem.reset();
43
44 if (!m_surfaceItem || m_surfaceItem->surface() != surface) {
45 if (surface) {
46 m_surfaceItem = std::make_unique<SurfaceItemWayland>(surface, scene(), this);
47 } else {
48 m_surfaceItem.reset();
49 }
50 }
51}
52
53void CursorItem::setImage(const QImage &image)
54{
55 m_surfaceItem.reset();
56
57 if (!m_imageItem) {
58 m_imageItem = scene()->renderer()->createImageItem(scene(), this);
59 }
60 m_imageItem->setImage(image);
61 m_imageItem->setSize(image.size() / image.devicePixelRatio());
62}
63
64} // namespace KWin
65
66#include "moc_cursoritem.cpp"
CursorSource * source() const
Definition cursor.cpp:698
CursorItem(Scene *scene, Item *parent=nullptr)
~CursorItem() override
static Cursors * self()
Definition cursor.cpp:35
void currentCursorChanged(Cursor *cursor)
Cursor * currentCursor() const
Definition cursor.h:285
Scene * scene() const
Definition item.cpp:32
virtual std::unique_ptr< ImageItem > createImageItem(Scene *scene, Item *parent=nullptr)=0
ItemRenderer * renderer() const
Definition scene.cpp:76