Unity 8
MousePointer.h
1 /*
2  * Copyright (C) 2015 Canonical, Ltd.
3  *
4  * This program is free software: you can redistribute it and/or modify it under
5  * the terms of the GNU Lesser General Public License version 3, as published by
6  * the Free Software Foundation.
7  *
8  * This program is distributed in the hope that it will be useful, but WITHOUT
9  * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY,
10  * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  * Lesser General Public License for more details.
12  *
13  * You should have received a copy of the GNU Lesser General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef MOUSEPOINTER_H
18 #define MOUSEPOINTER_H
19 
20 // Qt
21 #include <QPointer>
22 #include <QWindow>
23 
24 // Unity API
25 #include <unity/shell/application/MirMousePointerInterface.h>
26 
27 class MousePointer : public MirMousePointerInterface {
28  Q_OBJECT
29 public:
30  MousePointer(QQuickItem *parent = nullptr);
31 
32  void setCursorName(const QString &qtCursorName) override;
33  QString cursorName() const override { return m_cursorName; }
34 
35  void setThemeName(const QString &themeName) override;
36  QString themeName() const override { return m_themeName; }
37 
38  qreal hotspotX() const override { return m_hotspotX; }
39  qreal hotspotY() const override { return m_hotspotY; }
40 
41 public Q_SLOTS:
42  void handleMouseEvent(ulong timestamp, QPointF movement, Qt::MouseButtons buttons,
43  Qt::KeyboardModifiers modifiers) override;
44 
45 protected:
46  void itemChange(ItemChange change, const ItemChangeData &value) override;
47 
48 private:
49  void registerWindow(QWindow *window);
50  void updateHotspot();
51 
52  QPointer<QWindow> m_registeredWindow;
53  QString m_cursorName;
54  QString m_themeName;
55  int m_hotspotX;
56  int m_hotspotY;
57 };
58 
59 #endif // MOUSEPOINTER_H