summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/wasm/qwasmscreen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmscreen.cpp')
-rw-r--r--src/plugins/platforms/wasm/qwasmscreen.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/platforms/wasm/qwasmscreen.cpp b/src/plugins/platforms/wasm/qwasmscreen.cpp
index e536bc0ee3..d407111c2f 100644
--- a/src/plugins/platforms/wasm/qwasmscreen.cpp
+++ b/src/plugins/platforms/wasm/qwasmscreen.cpp
@@ -32,6 +32,8 @@
#include "qwasmeventtranslator.h"
#include "qwasmcompositor.h"
#include "qwasmintegration.h"
+#include "qwasmstring.h"
+
#include <emscripten/bind.h>
#include <emscripten/val.h>
@@ -44,6 +46,7 @@
#include <QtGui/qguiapplication.h>
#include <private/qhighdpiscaling_p.h>
+using namespace emscripten;
QT_BEGIN_NAMESPACE
@@ -182,12 +185,18 @@ void QWasmScreen::updateQScreenAndCanvasRenderSize()
QSizeF cssSize(css_width, css_height);
QSizeF canvasSize = cssSize * devicePixelRatio();
- emscripten::val canvas = emscripten::val::global(canvasId.constData());
+ val document = val::global("document");
+ val canvas = document.call<val>("getElementById", QWasmString::fromQString(m_canvasId));
+
canvas.set("width", canvasSize.width());
canvas.set("height", canvasSize.height());
+ QPoint offset;
+ offset.setX(canvas["offsetTop"].as<int>());
+ offset.setY(canvas["offsetLeft"].as<int>());
+
emscripten::val rect = canvas.call<emscripten::val>("getBoundingClientRect");
- QPoint position(rect["left"].as<int>(), rect["top"].as<int>());
+ QPoint position(rect["left"].as<int>() - offset.x(), rect["top"].as<int>() - offset.y());
setGeometry(QRect(position, cssSize.toSize()));
m_compositor->redrawWindowContent();