19#include <qpa/qplatformcursor.h>
20#include <qpa/qplatformscreen.h>
21#include <QtOpenGL/QOpenGLShaderProgram>
22#include <QtGui/QMatrix4x4>
23#include <QtGui/private/qinputdevicemanager_p.h>
25#include <QtCore/qlist.h>
29class QOpenGLShaderProgram;
45 QEglFSCursor *m_cursor;
50struct QEglFSCursorData {
51 QScopedPointer<QOpenGLShaderProgram> program;
54 uint customCursorTexture = 0;
55 uint atlasTexture = 0;
56 qint64 customCursorKey = 0;
59class Q_EGLFS_EXPORT QEglFSCursor :
public QPlatformCursor
63 QEglFSCursor(QPlatformScreen *screen);
67 void changeCursor(QCursor *cursor, QWindow *widget) override;
69 void pointerEvent(
const QMouseEvent &event) override;
70 QPoint pos()
const override;
71 void setPos(
const QPoint &pos) override;
73 QRect cursorRect()
const;
75 void resetResources();
77 void updateMouseStatus();
80 bool event(QEvent *e) override;
82 bool setCurrentCursor(QCursor *cursor);
84 void draw(
const QRectF &rect);
85 void update(
const QRect &rect,
bool allScreens);
86 void createShaderPrograms();
87 void createCursorTexture(uint *texture,
const QImage &image);
88 void initCursorAtlas();
92 Cursor() : shape(Qt::BlankCursor), customCursorPending(
false), customCursorKey(0), useCustomCursor(
false) { }
93 Qt::CursorShape shape;
97 QImage customCursorImage;
99 bool customCursorPending;
100 qint64 customCursorKey;
101 bool useCustomCursor;
106 CursorAtlas() : cursorsPerRow(0), cursorWidth(0), cursorHeight(0) { }
109 int cursorWidth, cursorHeight;
110 QList<QPoint> hotSpots;
115 QEglFSScreen *m_screen;
116 QPlatformScreen *m_activeScreen;
117 QEglFSCursorDeviceListener *m_deviceListener;
118 bool m_updateRequested;
119 QMatrix4x4 m_rotationMatrix;