diff options
Diffstat (limited to 'src/plugins/platforms/wasm/qwasmoffscreensurface.cpp')
-rw-r--r-- | src/plugins/platforms/wasm/qwasmoffscreensurface.cpp | 26 |
1 files changed, 23 insertions, 3 deletions
diff --git a/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp b/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp index bb04a66fcb..dcfc4433e6 100644 --- a/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp +++ b/src/plugins/platforms/wasm/qwasmoffscreensurface.cpp @@ -3,13 +3,33 @@ #include "qwasmoffscreensurface.h" -QWasmOffscrenSurface::QWasmOffscrenSurface(QOffscreenSurface *offscreenSurface) - :QPlatformOffscreenSurface(offscreenSurface) +QT_BEGIN_NAMESPACE + +QWasmOffscreenSurface::QWasmOffscreenSurface(QOffscreenSurface *offscreenSurface) + : QPlatformOffscreenSurface(offscreenSurface), m_offscreenCanvas(emscripten::val::undefined()) { + const auto offscreenCanvasClass = emscripten::val::global("OffscreenCanvas"); + // The OffscreenCanvas is not supported on some browsers, most notably on Safari. + if (!offscreenCanvasClass) + return; + + m_offscreenCanvas = offscreenCanvasClass.new_(offscreenSurface->size().width(), + offscreenSurface->size().height()); + + m_specialTargetId = std::string("!qtoffscreen_") + std::to_string(uintptr_t(this)); + emscripten::val::module_property("specialHTMLTargets") + .set(m_specialTargetId, m_offscreenCanvas); } -QWasmOffscrenSurface::~QWasmOffscrenSurface() +QWasmOffscreenSurface::~QWasmOffscreenSurface() { + emscripten::val::module_property("specialHTMLTargets").delete_(m_specialTargetId); +} +bool QWasmOffscreenSurface::isValid() const +{ + return !m_offscreenCanvas.isNull() && !m_offscreenCanvas.isUndefined(); } + +QT_END_NAMESPACE |