Changeset View
Changeset View
Standalone View
Standalone View
plugins/qpa/backingstore.cpp
Show First 20 Lines • Show All 41 Lines • ▼ Show 20 Line(s) | 41 | if (!m_buffer) { | |||
---|---|---|---|---|---|
42 | return; | 42 | return; | ||
43 | } | 43 | } | ||
44 | auto b = m_buffer.toStrongRef(); | 44 | auto b = m_buffer.toStrongRef(); | ||
45 | if (!b->isUsed()){ | 45 | if (!b->isUsed()){ | ||
46 | return; | 46 | return; | ||
47 | } | 47 | } | ||
48 | const QSize size = m_backBuffer.size(); | 48 | const QSize size = m_backBuffer.size(); | ||
49 | m_backBuffer = QImage(b->address(), size.width(), size.height(), QImage::Format_ARGB32_Premultiplied); | 49 | m_backBuffer = QImage(b->address(), size.width(), size.height(), QImage::Format_ARGB32_Premultiplied); | ||
50 | m_backBuffer.setDevicePixelRatio(scale()); | ||||
50 | } | 51 | } | ||
51 | ); | 52 | ); | ||
52 | } | 53 | } | ||
53 | 54 | | |||
54 | BackingStore::~BackingStore() = default; | 55 | BackingStore::~BackingStore() = default; | ||
55 | 56 | | |||
56 | QPaintDevice *BackingStore::paintDevice() | 57 | QPaintDevice *BackingStore::paintDevice() | ||
57 | { | 58 | { | ||
58 | return &m_backBuffer; | 59 | return &m_backBuffer; | ||
59 | } | 60 | } | ||
60 | 61 | | |||
61 | void BackingStore::resize(const QSize &size, const QRegion &staticContents) | 62 | void BackingStore::resize(const QSize &size, const QRegion &staticContents) | ||
62 | { | 63 | { | ||
63 | Q_UNUSED(staticContents) | 64 | Q_UNUSED(staticContents) | ||
64 | m_size = size; | 65 | m_size = size * scale(); | ||
65 | if (!m_buffer) { | 66 | if (!m_buffer) { | ||
66 | return; | 67 | return; | ||
67 | } | 68 | } | ||
68 | m_buffer.toStrongRef()->setUsed(false); | 69 | m_buffer.toStrongRef()->setUsed(false); | ||
69 | m_buffer.clear(); | 70 | m_buffer.clear(); | ||
70 | } | 71 | } | ||
71 | 72 | | |||
72 | void BackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) | 73 | void BackingStore::flush(QWindow *window, const QRegion ®ion, const QPoint &offset) | ||
73 | { | 74 | { | ||
74 | Q_UNUSED(region) | 75 | Q_UNUSED(region) | ||
75 | Q_UNUSED(offset) | 76 | Q_UNUSED(offset) | ||
76 | auto s = static_cast<Window *>(window->handle())->surface(); | 77 | | ||
78 | auto w = static_cast<Window *>(window->handle()); | ||||
79 | auto s = w->surface(); | ||||
77 | if (!s) { | 80 | if (!s) { | ||
78 | return; | 81 | return; | ||
79 | } | 82 | } | ||
80 | s->attachBuffer(m_buffer); | 83 | s->attachBuffer(m_buffer); | ||
81 | // TODO: proper damage region | 84 | // TODO: proper damage region | ||
82 | s->damage(QRect(QPoint(0, 0), m_backBuffer.size())); | 85 | s->damage(QRect(QPoint(0, 0), m_backBuffer.size() / scale())); | ||
83 | s->commit(KWayland::Client::Surface::CommitFlag::None); | 86 | s->commit(KWayland::Client::Surface::CommitFlag::None); | ||
84 | waylandServer()->internalClientConection()->flush(); | 87 | waylandServer()->internalClientConection()->flush(); | ||
85 | waylandServer()->dispatch(); | 88 | waylandServer()->dispatch(); | ||
86 | } | 89 | } | ||
87 | 90 | | |||
88 | void BackingStore::beginPaint(const QRegion&) | 91 | void BackingStore::beginPaint(const QRegion&) | ||
89 | { | 92 | { | ||
90 | if (m_buffer) { | 93 | if (m_buffer) { | ||
Show All 12 Lines | |||||
103 | m_buffer = m_shm->getBuffer(m_size, m_size.width() * 4); | 106 | m_buffer = m_shm->getBuffer(m_size, m_size.width() * 4); | ||
104 | if (!m_buffer) { | 107 | if (!m_buffer) { | ||
105 | m_backBuffer = QImage(); | 108 | m_backBuffer = QImage(); | ||
106 | return; | 109 | return; | ||
107 | } | 110 | } | ||
108 | auto b = m_buffer.toStrongRef(); | 111 | auto b = m_buffer.toStrongRef(); | ||
109 | b->setUsed(true); | 112 | b->setUsed(true); | ||
110 | m_backBuffer = QImage(b->address(), m_size.width(), m_size.height(), QImage::Format_ARGB32_Premultiplied); | 113 | m_backBuffer = QImage(b->address(), m_size.width(), m_size.height(), QImage::Format_ARGB32_Premultiplied); | ||
114 | m_backBuffer.setDevicePixelRatio(scale()); | ||||
111 | if (oldBuffer) { | 115 | if (oldBuffer) { | ||
112 | b->copy(oldBuffer->address()); | 116 | b->copy(oldBuffer->address()); | ||
113 | } else { | 117 | } else { | ||
114 | m_backBuffer.fill(Qt::transparent); | 118 | m_backBuffer.fill(Qt::transparent); | ||
115 | } | 119 | } | ||
116 | } | 120 | } | ||
117 | 121 | | |||
122 | int BackingStore::scale() const | ||||
123 | { | ||||
124 | return static_cast<Window *>(window()->handle())->scale(); | ||||
125 | } | ||||
126 | | ||||
118 | } | 127 | } | ||
119 | } | 128 | } |