summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms
diff options
context:
space:
mode:
authorMikolaj Boc <mikolaj.boc@qt.io>2023-02-01 13:19:33 +0100
committerMikolaj Boc <mikolaj.boc@qt.io>2023-02-03 09:46:05 +0100
commit7c33f4be022d87c5a83d728cceb5673cd55ed346 (patch)
treed7d86c523775c5206506313bb5fcc6650c5cde8d /src/plugins/platforms
parentf54fab6125d79903ebabae1b52423ac984800d26 (diff)
Support window masks on WASM
QWasmWindow is now implementing the setMask method, which translates the received QRegion to a css clip path Fixes: QTBUG-73260 Change-Id: Ie934c1e6ab650426bfc32154bf9e49a4a2aeb45b Reviewed-by: Aleksandr Reviakin <aleksandr.reviakin@qt.io> Reviewed-by: Morten Johan Sørvig <morten.sorvig@qt.io>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.cpp24
-rw-r--r--src/plugins/platforms/wasm/qwasmwindow.h1
2 files changed, 23 insertions, 2 deletions
diff --git a/src/plugins/platforms/wasm/qwasmwindow.cpp b/src/plugins/platforms/wasm/qwasmwindow.cpp
index be0dd74797..1dc43b61bb 100644
--- a/src/plugins/platforms/wasm/qwasmwindow.cpp
+++ b/src/plugins/platforms/wasm/qwasmwindow.cpp
@@ -20,9 +20,9 @@
#include "qwasmaccessibility.h"
#include <iostream>
-#include <emscripten/val.h>
+#include <sstream>
-#include <GL/gl.h>
+#include <emscripten/val.h>
#include <QtCore/private/qstdweb_p.h>
@@ -544,6 +544,26 @@ bool QWasmWindow::windowEvent(QEvent *event)
}
}
+void QWasmWindow::setMask(const QRegion &region)
+{
+ if (region.isEmpty()) {
+ m_qtWindow["style"].set("clipPath", emscripten::val(""));
+ return;
+ }
+
+ std::ostringstream cssClipPath;
+ cssClipPath << "path('";
+ for (const auto &rect : region) {
+ const auto cssRect = rect.adjusted(0, 0, 1, 1);
+ cssClipPath << "M " << cssRect.left() << " " << cssRect.top() << " ";
+ cssClipPath << "L " << cssRect.right() << " " << cssRect.top() << " ";
+ cssClipPath << "L " << cssRect.right() << " " << cssRect.bottom() << " ";
+ cssClipPath << "L " << cssRect.left() << " " << cssRect.bottom() << " z ";
+ }
+ cssClipPath << "')";
+ m_qtWindow["style"].set("clipPath", emscripten::val(cssClipPath.str()));
+}
+
std::string QWasmWindow::canvasSelector() const
{
return "!qtwindow" + std::to_string(m_winId);
diff --git a/src/plugins/platforms/wasm/qwasmwindow.h b/src/plugins/platforms/wasm/qwasmwindow.h
index d90e828283..7f4047b758 100644
--- a/src/plugins/platforms/wasm/qwasmwindow.h
+++ b/src/plugins/platforms/wasm/qwasmwindow.h
@@ -75,6 +75,7 @@ public:
bool setKeyboardGrabEnabled(bool) override { return false; }
bool setMouseGrabEnabled(bool grab) final;
bool windowEvent(QEvent *event) final;
+ void setMask(const QRegion &region) final;
QWasmScreen *platformScreen() const;
void setBackingStore(QWasmBackingStore *store) { m_backingStore = store; }