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>
This commit is contained in:
parent
f54fab6125
commit
7c33f4be02
@ -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 ®ion)
|
||||
{
|
||||
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);
|
||||
|
@ -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 ®ion) final;
|
||||
|
||||
QWasmScreen *platformScreen() const;
|
||||
void setBackingStore(QWasmBackingStore *store) { m_backingStore = store; }
|
||||
|
Loading…
x
Reference in New Issue
Block a user