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  void setCustomCursor(const QCursor &) override;
42 
43 public Q_SLOTS:
44  void handleMouseEvent(ulong timestamp, QPointF movement, Qt::MouseButtons buttons,
45  Qt::KeyboardModifiers modifiers) override;
46  void handleWheelEvent(ulong timestamp, QPoint angleDelta, Qt::KeyboardModifiers modifiers) override;
47 
48 Q_SIGNALS:
49  void pushedLeftBoundary(qreal amount, Qt::MouseButtons buttons);
50  void pushedRightBoundary(qreal amount, Qt::MouseButtons buttons);
51  void mouseMoved();
52 
53 protected:
54  void itemChange(ItemChange change, const ItemChangeData &value) override;
55 
56 private:
57  void registerWindow(QWindow *window);
58  void updateHotspot();
59 
60  QPointer<QWindow> m_registeredWindow;
61  QString m_cursorName;
62  QString m_themeName;
63  int m_hotspotX;
64  int m_hotspotY;
65 };
66 
67 #endif // MOUSEPOINTER_H