19 : QPlatformBackingStore(window), m_compositor(compositor)
21 QWasmWindow *wasmWindow =
static_cast<QWasmWindow *>(window->handle());
23 wasmWindow->setBackingStore(
this);
56 if (m_image.size().isEmpty())
59 if (m_webImageDataArray.isUndefined()) {
60 m_webImageDataArray = window->context2d().call<emscripten::val>(
61 "createImageData", emscripten::val(m_image.width()),
62 emscripten::val(m_image.height()));
65 QRegion clippedDpiScaledRegion;
66 QRect imageRect = m_image.rect();
68 for (
const QRect &rect : m_dirty) {
70 qreal dpr = m_image.devicePixelRatio();
71 QRect deviceRect = QRect(rect.topLeft() * dpr, rect.size() * dpr);
74 QRect r = imageRect & deviceRect;
76 if (r.width() >= imageRect.width() / 2) {
78 r.setWidth(imageRect.width());
81 clippedDpiScaledRegion |= r;
84 for (
const QRect &dirtyRect : clippedDpiScaledRegion)
85 dom::drawImageToWebImageDataArray(m_image, m_webImageDataArray, dirtyRect);
94 if (m_image.devicePixelRatio() != window()->handle()->devicePixelRatio())
95 resize(backingStore()->size(), backingStore()->staticContents());
97 QPainter painter(&m_image);
99 if (m_image.hasAlphaChannel()) {
100 painter.setCompositionMode(QPainter::CompositionMode_Source);
101 const QColor blank = Qt::transparent;
102 for (
const QRect &rect : region)
103 painter.fillRect(rect, blank);
109 Q_UNUSED(staticContents);
111 QImage::Format format = QImage::Format_RGBA8888;
112 const auto platformScreenDPR = window()->handle()->devicePixelRatio();
113 m_image = QImage(size * platformScreenDPR, format);
114 m_image.setDevicePixelRatio(platformScreenDPR);
115 m_webImageDataArray = emscripten::val::undefined();