19 : QPlatformBackingStore(window), m_compositor(compositor)
21 QWasmWindow *wasmWindow =
static_cast<QWasmWindow *>(window->handle());
23 wasmWindow->setBackingStore(
this);
56 if (m_webImageDataArray.isUndefined()) {
57 m_webImageDataArray = window->context2d().call<emscripten::val>(
58 "createImageData", emscripten::val(m_image.width()),
59 emscripten::val(m_image.height()));
62 QRegion clippedDpiScaledRegion;
63 QRect imageRect = m_image.rect();
65 for (
const QRect &rect : m_dirty) {
67 qreal dpr = m_image.devicePixelRatio();
68 QRect deviceRect = QRect(rect.topLeft() * dpr, rect.size() * dpr);
71 QRect r = imageRect & deviceRect;
73 if (r.width() >= imageRect.width() / 2) {
75 r.setWidth(imageRect.width());
78 clippedDpiScaledRegion |= r;
81 for (
const QRect &dirtyRect : clippedDpiScaledRegion)
82 dom::drawImageToWebImageDataArray(m_image, m_webImageDataArray, dirtyRect);
91 if (m_image.devicePixelRatio() != window()->handle()->devicePixelRatio())
92 resize(backingStore()->size(), backingStore()->staticContents());
94 QPainter painter(&m_image);
96 if (m_image.hasAlphaChannel()) {
97 painter.setCompositionMode(QPainter::CompositionMode_Source);
98 const QColor blank = Qt::transparent;
99 for (
const QRect &rect : region)
100 painter.fillRect(rect, blank);
106 Q_UNUSED(staticContents);
108 QImage::Format format = QImage::Format_RGBA8888;
109 const auto platformScreenDPR = window()->handle()->devicePixelRatio();
110 m_image = QImage(size * platformScreenDPR, format);
111 m_image.setDevicePixelRatio(platformScreenDPR);
112 m_webImageDataArray = emscripten::val::undefined();