8#include <QtCore/qbuffer.h>
9#include <QtCore/qdebug.h>
10#include <QtCore/qstring.h>
11#include <QtGui/qwindow.h>
13#include <emscripten/emscripten.h>
14#include <emscripten/bind.h>
17using namespace emscripten;
20QByteArray cursorToCss(
const QCursor *cursor)
22 auto shape = cursor->shape();
26 case Qt::UpArrowCursor:
34 case Qt::SizeVerCursor:
36 case Qt::SizeHorCursor:
38 case Qt::SizeBDiagCursor:
40 case Qt::SizeFDiagCursor:
42 case Qt::SizeAllCursor:
46 case Qt::SplitVCursor:
48 case Qt::SplitHCursor:
50 case Qt::PointingHandCursor:
52 case Qt::ForbiddenCursor:
54 case Qt::WhatsThisCursor:
58 case Qt::OpenHandCursor:
60 case Qt::ClosedHandCursor:
62 case Qt::DragCopyCursor:
64 case Qt::DragMoveCursor:
66 case Qt::DragLinkCursor:
68 case Qt::BitmapCursor: {
69 auto pixmap = cursor->pixmap();
70 QByteArray cursorAsPng;
71 QBuffer buffer(&cursorAsPng);
72 buffer.open(QBuffer::WriteOnly);
73 pixmap.save(&buffer,
"PNG");
75 auto cursorAsBase64 = cursorAsPng.toBase64();
76 auto hotSpot = cursor->hotSpot();
78 QString(
"url(data:image/png;base64,%1) %2 %3, auto")
79 .arg(QString::fromUtf8(cursorAsBase64),
80 QString::number(hotSpot.x()),
81 QString::number(hotSpot.y()));
82 return encodedCursor.toUtf8();
85 static_assert(Qt::CustomCursor == 25,
86 "New cursor type added, handle it");
87 qWarning() <<
"QWasmCursor: " << shape <<
" unsupported";
93void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
97 if (QWasmWindow *wasmWindow =
static_cast<QWasmWindow *>(window->handle()))
98 wasmWindow->setWindowCursor(windowCursor ? cursorToCss(windowCursor) :
"default");
Combined button and popup list for selecting options.