wasm: do not get canvas as property of js global object
You cannot be sure that property with specified key in a global object is really a canvas. Should use `document.getElementById`. Change-Id: Ife55adaad5517aed64122b0c9bff32489cf19a2f Reviewed-by: Lorn Potter <lorn.potter@gmail.com>
This commit is contained in:
parent
3d1e257770
commit
18e06c37e1
@ -198,7 +198,9 @@ void QWasmClipboard::installEventHandlers(const QString &canvasId)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
// Fallback path for browsers which do not support direct clipboard access
|
// Fallback path for browsers which do not support direct clipboard access
|
||||||
val canvas = val::global(canvasId.toUtf8().constData());
|
val document = val::global("document");
|
||||||
|
val canvas = document.call<val>("getElementById", val(canvasId.toUtf8().constData()));
|
||||||
|
|
||||||
canvas.call<void>("addEventListener", std::string("cut"),
|
canvas.call<void>("addEventListener", std::string("cut"),
|
||||||
val::module_property("qtClipboardCutTo"));
|
val::module_property("qtClipboardCutTo"));
|
||||||
canvas.call<void>("addEventListener", std::string("copy"),
|
canvas.call<void>("addEventListener", std::string("copy"),
|
||||||
|
@ -36,6 +36,8 @@
|
|||||||
#include <emscripten/emscripten.h>
|
#include <emscripten/emscripten.h>
|
||||||
#include <emscripten/bind.h>
|
#include <emscripten/bind.h>
|
||||||
|
|
||||||
|
using namespace emscripten;
|
||||||
|
|
||||||
void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
||||||
{
|
{
|
||||||
if (!windowCursor || !window)
|
if (!windowCursor || !window)
|
||||||
@ -54,8 +56,10 @@ void QWasmCursor::changeCursor(QCursor *windowCursor, QWindow *window)
|
|||||||
htmlCursorName = "auto";
|
htmlCursorName = "auto";
|
||||||
|
|
||||||
// Set cursor on the canvas
|
// Set cursor on the canvas
|
||||||
QString canvasId = QWasmScreen::get(screen)->canvasId();
|
QByteArray canvasId = QWasmScreen::get(screen)->canvasId().toUtf8();
|
||||||
emscripten::val canvasStyle = emscripten::val::global(canvasId.toUtf8().constData())["style"];
|
val document = val::global("document");
|
||||||
|
val canvas = document.call<val>("getElementById", val(canvasId.constData()));
|
||||||
|
val canvasStyle = canvas["style"];
|
||||||
canvasStyle.set("cursor", emscripten::val(htmlCursorName.constData()));
|
canvasStyle.set("cursor", emscripten::val(htmlCursorName.constData()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,9 +47,10 @@
|
|||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
using namespace emscripten;
|
using namespace emscripten;
|
||||||
|
|
||||||
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
typedef struct emkb2qt {
|
typedef struct emkb2qt {
|
||||||
const char *em;
|
const char *em;
|
||||||
unsigned int qt;
|
unsigned int qt;
|
||||||
@ -353,8 +354,9 @@ void QWasmEventTranslator::initEventHandlers()
|
|||||||
g_useNaturalScrolling = false; // make this !default on macOS
|
g_useNaturalScrolling = false; // make this !default on macOS
|
||||||
|
|
||||||
if (emscripten::val::global("window")["safari"].isUndefined()) {
|
if (emscripten::val::global("window")["safari"].isUndefined()) {
|
||||||
|
val document = val::global("document");
|
||||||
emscripten::val::global(canvasId).call<void>("addEventListener",
|
val canvas = document.call<val>("getElementById", val(canvasId));
|
||||||
|
canvas.call<void>("addEventListener",
|
||||||
std::string("wheel"),
|
std::string("wheel"),
|
||||||
val::module_property("qtMouseWheelEvent"));
|
val::module_property("qtMouseWheelEvent"));
|
||||||
}
|
}
|
||||||
|
@ -106,7 +106,7 @@ EMSCRIPTEN_WEBGL_CONTEXT_HANDLE QWasmOpenGLContext::createEmscriptenContext(cons
|
|||||||
attributes.depth = useDepthStencil;
|
attributes.depth = useDepthStencil;
|
||||||
attributes.stencil = useDepthStencil;
|
attributes.stencil = useDepthStencil;
|
||||||
|
|
||||||
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context = emscripten_webgl_create_context(canvasId.toLocal8Bit().constData(), &attributes);
|
EMSCRIPTEN_WEBGL_CONTEXT_HANDLE context = emscripten_webgl_create_context(canvasId.toUtf8().constData(), &attributes);
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
@ -44,6 +44,7 @@
|
|||||||
#include <QtGui/qguiapplication.h>
|
#include <QtGui/qguiapplication.h>
|
||||||
#include <private/qhighdpiscaling_p.h>
|
#include <private/qhighdpiscaling_p.h>
|
||||||
|
|
||||||
|
using namespace emscripten;
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
@ -182,13 +183,15 @@ void QWasmScreen::updateQScreenAndCanvasRenderSize()
|
|||||||
QSizeF cssSize(css_width, css_height);
|
QSizeF cssSize(css_width, css_height);
|
||||||
|
|
||||||
QSizeF canvasSize = cssSize * devicePixelRatio();
|
QSizeF canvasSize = cssSize * devicePixelRatio();
|
||||||
emscripten::val canvas = emscripten::val::global(canvasId.constData());
|
val document = val::global("document");
|
||||||
|
val canvas = document.call<val>("getElementById", val(canvasId.constData()));
|
||||||
|
|
||||||
canvas.set("width", canvasSize.width());
|
canvas.set("width", canvasSize.width());
|
||||||
canvas.set("height", canvasSize.height());
|
canvas.set("height", canvasSize.height());
|
||||||
|
|
||||||
QPoint offset;
|
QPoint offset;
|
||||||
offset.setX(emscripten::val::global(canvasId.constData())["offsetTop"].as<int>());
|
offset.setX(canvas["offsetTop"].as<int>());
|
||||||
offset.setY(emscripten::val::global(canvasId.constData())["offsetLeft"].as<int>());
|
offset.setY(canvas["offsetLeft"].as<int>());
|
||||||
|
|
||||||
emscripten::val rect = canvas.call<emscripten::val>("getBoundingClientRect");
|
emscripten::val rect = canvas.call<emscripten::val>("getBoundingClientRect");
|
||||||
QPoint position(rect["left"].as<int>() - offset.x(), rect["top"].as<int>() - offset.y());
|
QPoint position(rect["left"].as<int>() - offset.x(), rect["top"].as<int>() - offset.y());
|
||||||
|
Loading…
x
Reference in New Issue
Block a user