6#include <QtGui/QPainter>
7#include <QtGui/private/qguiapplication_p.h>
11bool QFbCursorDeviceListener::hasMouse()
const
13 return QGuiApplicationPrivate::inputDeviceManager()->deviceCount(QInputDeviceManager::DeviceTypePointer) > 0;
18 if (type == QInputDeviceManager::DeviceTypePointer)
27 mCursorImage(
nullptr),
28 mDeviceListener(
nullptr)
30 const char *envVar =
"QT_QPA_FB_HIDECURSOR";
31 if (qEnvironmentVariableIsSet(envVar))
32 mVisible = qEnvironmentVariableIntValue(envVar) == 0;
36 mCursorImage.reset(
new QPlatformCursorImage(0, 0, 0, 0, 0, 0));
37 setCursor(Qt::ArrowCursor);
39 mDeviceListener =
new QFbCursorDeviceListener(
this);
40 connect(QGuiApplicationPrivate::inputDeviceManager(), &QInputDeviceManager::deviceListChanged,
41 mDeviceListener, &QFbCursorDeviceListener::onDeviceListChanged);
47 delete mDeviceListener;
52 QRect rect = mCursorImage->image()->rect().translated(-mCursorImage->hotspot().x(),
53 -mCursorImage->hotspot().y());
54 rect.translate(m_pos);
55 QPoint mScreenOffset = mScreen->geometry().topLeft();
56 rect.translate(-mScreenOffset);
67 QGuiApplicationPrivate::inputDeviceManager()->setCursorPos(pos);
71 mCurrentRect = getCurrentRect();
72 if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreen->geometry().topLeft())))
78 if (e.type() != QEvent::MouseMove)
80 m_pos = e.globalPosition().toPoint();
83 mCurrentRect = getCurrentRect();
84 if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreen->geometry().topLeft())))
94 if (mCurrentRect.isNull())
98 QPoint mScreenOffset = mScreen->geometry().topLeft();
100 if (!mCurrentRect.translated(mScreenOffset).intersects(mScreen->geometry()))
103 mPrevRect = mCurrentRect;
104 painter.drawImage(mPrevRect, *mCursorImage->image());
118void QFbCursor::setCursor(Qt::CursorShape shape)
121 mCursorImage->set(shape);
124void QFbCursor::setCursor(
const QImage &image,
int hotx,
int hoty)
127 mCursorImage->set(image, hotx, hoty);
130void QFbCursor::setCursor(
const uchar *data,
const uchar *mask,
int width,
int height,
int hotX,
int hotY)
133 mCursorImage->set(data, mask, width, height, hotX, hotY);
142 const Qt::CursorShape shape = widgetCursor ? widgetCursor->shape() : Qt::ArrowCursor;
144 if (shape == Qt::BitmapCursor) {
146 QPoint spot = widgetCursor->hotSpot();
147 setCursor(widgetCursor->pixmap().toImage(), spot.x(), spot.y());
152 mCurrentRect = getCurrentRect();
153 QPoint mScreenOffset = mScreen->geometry().topLeft();
154 if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreenOffset)))
172 mVisible = mDeviceListener ? mDeviceListener->hasMouse() :
false;
173 mScreen->setDirty(mVisible ? getCurrentRect() : lastPainted());
178#include "moc_qfbcursor_p.cpp"
void setPos(const QPoint &pos) override
QPoint pos() const override
void pointerEvent(const QMouseEvent &event) override
This method is called by Qt whenever a QMouseEvent is generated by the underlying pointer input.
void changeCursor(QCursor *widgetCursor, QWindow *window) override
This method is called by Qt whenever the cursor graphic should be changed.