18 : QPlatformBackingStore(window), m_compositor(compositor)
20 QWasmWindow *wasmWindow =
static_cast<QWasmWindow *>(window->handle());
22 wasmWindow->setBackingStore(
this);
55 if (m_webImageDataArray.isUndefined()) {
56 m_webImageDataArray = window->context2d().call<emscripten::val>(
57 "createImageData", emscripten::val(m_image.width()),
58 emscripten::val(m_image.height()));
61 QRegion clippedDpiScaledRegion;
62 QRect imageRect = m_image.rect();
64 for (
const QRect &rect : m_dirty) {
66 qreal dpr = m_image.devicePixelRatio();
67 QRect deviceRect = QRect(rect.topLeft() * dpr, rect.size() * dpr);
70 QRect r = imageRect & deviceRect;
72 if (r.width() >= imageRect.width() / 2) {
74 r.setWidth(imageRect.width());
77 clippedDpiScaledRegion |= r;
80 for (
const QRect &dirtyRect : clippedDpiScaledRegion)
81 dom::drawImageToWebImageDataArray(m_image, m_webImageDataArray, dirtyRect);
90 if (m_image.devicePixelRatio() != window()->handle()->devicePixelRatio())
91 resize(backingStore()->size(), backingStore()->staticContents());
93 QPainter painter(&m_image);
95 if (m_image.hasAlphaChannel()) {
96 painter.setCompositionMode(QPainter::CompositionMode_Source);
97 const QColor blank = Qt::transparent;
98 for (
const QRect &rect : region)
99 painter.fillRect(rect, blank);
105 Q_UNUSED(staticContents);
107 QImage::Format format = QImage::Format_RGBA8888;
108 const auto platformScreenDPR = window()->handle()->devicePixelRatio();
109 m_image = QImage(size * platformScreenDPR, format);
110 m_image.setDevicePixelRatio(platformScreenDPR);
111 m_webImageDataArray = emscripten::val::undefined();