9#include <QtCore/qbuffer.h>
10#include <QtCore/qdebug.h>
11#include <QtCore/qstring.h>
12#include <QtGui/qwindow.h>
14#include <emscripten/emscripten.h>
15#include <emscripten/bind.h>
18using namespace emscripten;
21QByteArray cursorToCss(
const QCursor *cursor)
23 auto shape = cursor->shape();
27 case Qt::UpArrowCursor:
35 case Qt::SizeVerCursor:
37 case Qt::SizeHorCursor:
39 case Qt::SizeBDiagCursor:
41 case Qt::SizeFDiagCursor:
43 case Qt::SizeAllCursor:
47 case Qt::SplitVCursor:
49 case Qt::SplitHCursor:
51 case Qt::PointingHandCursor:
53 case Qt::ForbiddenCursor:
55 case Qt::WhatsThisCursor:
59 case Qt::OpenHandCursor:
61 case Qt::ClosedHandCursor:
63 case Qt::DragCopyCursor:
65 case Qt::DragMoveCursor:
67 case Qt::DragLinkCursor:
69 case Qt::BitmapCursor: {
70 auto pixmap = cursor->pixmap();
71 QByteArray cursorAsPng;
72 QBuffer buffer(&cursorAsPng);
73 buffer.open(QBuffer::WriteOnly);
74 pixmap.save(&buffer,
"PNG");
76 auto cursorAsBase64 = cursorAsPng.toBase64();
77 auto hotSpot = cursor->hotSpot();
79 QString(
"url(data:image/png;base64,%1) %2 %3, auto")
80 .arg(QString::fromUtf8(cursorAsBase64),
81 QString::number(hotSpot.x()),
82 QString::number(hotSpot.y()));
83 return encodedCursor.toUtf8();
86 static_assert(Qt::CustomCursor == 25,
87 "New cursor type added, handle it");
88 qWarning() <<
"QWasmCursor: " << shape <<
" unsupported";
94void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
99 wasmWindow->setWindowCursor(windowCursor ? cursorToCss(windowCursor) :
"default");
friend class QWasmCompositor
Combined button and popup list for selecting options.