Changeset View
Changeset View
Standalone View
Standalone View
scene_qpainter.cpp
Show First 20 Lines • Show All 67 Lines • ▼ Show 20 Line(s) | |||||
68 | } | 68 | } | ||
69 | 69 | | |||
70 | void QPainterBackend::setFailed(const QString &reason) | 70 | void QPainterBackend::setFailed(const QString &reason) | ||
71 | { | 71 | { | ||
72 | qCWarning(KWIN_CORE) << "Creating the XRender backend failed: " << reason; | 72 | qCWarning(KWIN_CORE) << "Creating the XRender backend failed: " << reason; | ||
73 | m_failed = true; | 73 | m_failed = true; | ||
74 | } | 74 | } | ||
75 | 75 | | |||
76 | void QPainterBackend::renderCursor(QPainter *painter) | | |||
77 | { | | |||
78 | Q_UNUSED(painter) | | |||
79 | } | | |||
80 | | ||||
81 | bool QPainterBackend::perScreenRendering() const | 76 | bool QPainterBackend::perScreenRendering() const | ||
82 | { | 77 | { | ||
83 | return false; | 78 | return false; | ||
84 | } | 79 | } | ||
85 | 80 | | |||
86 | QImage *QPainterBackend::bufferForScreen(int screenId) | 81 | QImage *QPainterBackend::bufferForScreen(int screenId) | ||
87 | { | 82 | { | ||
88 | Q_UNUSED(screenId) | 83 | Q_UNUSED(screenId) | ||
▲ Show 20 Lines • Show All 69 Lines • ▼ Show 20 Line(s) | 148 | for (int i = 0; i < screens()->count(); ++i) { | |||
158 | } | 153 | } | ||
159 | m_painter->begin(buffer); | 154 | m_painter->begin(buffer); | ||
160 | m_painter->save(); | 155 | m_painter->save(); | ||
161 | m_painter->setWindow(geometry); | 156 | m_painter->setWindow(geometry); | ||
162 | 157 | | |||
163 | QRegion updateRegion, validRegion; | 158 | QRegion updateRegion, validRegion; | ||
164 | paintScreen(&mask, damage.intersected(geometry), QRegion(), &updateRegion, &validRegion); | 159 | paintScreen(&mask, damage.intersected(geometry), QRegion(), &updateRegion, &validRegion); | ||
165 | overallUpdate = overallUpdate.united(updateRegion); | 160 | overallUpdate = overallUpdate.united(updateRegion); | ||
166 | m_backend->renderCursor(m_painter.data()); | 161 | paintCursor(); | ||
167 | 162 | | |||
168 | m_painter->restore(); | 163 | m_painter->restore(); | ||
169 | m_painter->end(); | 164 | m_painter->end(); | ||
170 | } | 165 | } | ||
171 | m_backend->showOverlay(); | 166 | m_backend->showOverlay(); | ||
172 | m_backend->present(mask, overallUpdate); | 167 | m_backend->present(mask, overallUpdate); | ||
173 | } else { | 168 | } else { | ||
174 | m_painter->begin(m_backend->buffer()); | 169 | m_painter->begin(m_backend->buffer()); | ||
175 | m_painter->setClipping(true); | 170 | m_painter->setClipping(true); | ||
176 | m_painter->setClipRegion(damage); | 171 | m_painter->setClipRegion(damage); | ||
177 | if (m_backend->needsFullRepaint()) { | 172 | if (m_backend->needsFullRepaint()) { | ||
178 | mask |= Scene::PAINT_SCREEN_BACKGROUND_FIRST; | 173 | mask |= Scene::PAINT_SCREEN_BACKGROUND_FIRST; | ||
179 | damage = QRegion(0, 0, displayWidth(), displayHeight()); | 174 | damage = QRegion(0, 0, displayWidth(), displayHeight()); | ||
180 | } | 175 | } | ||
181 | QRegion updateRegion, validRegion; | 176 | QRegion updateRegion, validRegion; | ||
182 | paintScreen(&mask, damage, QRegion(), &updateRegion, &validRegion); | 177 | paintScreen(&mask, damage, QRegion(), &updateRegion, &validRegion); | ||
183 | 178 | | |||
184 | m_backend->renderCursor(m_painter.data()); | 179 | paintCursor(); | ||
185 | m_backend->showOverlay(); | 180 | m_backend->showOverlay(); | ||
186 | 181 | | |||
187 | m_painter->end(); | 182 | m_painter->end(); | ||
188 | m_backend->present(mask, updateRegion); | 183 | m_backend->present(mask, updateRegion); | ||
189 | } | 184 | } | ||
190 | 185 | | |||
191 | // do cleanup | 186 | // do cleanup | ||
192 | clearStackingOrder(); | 187 | clearStackingOrder(); | ||
193 | 188 | | |||
194 | return renderTimer.nsecsElapsed(); | 189 | return renderTimer.nsecsElapsed(); | ||
195 | } | 190 | } | ||
196 | 191 | | |||
197 | void SceneQPainter::paintBackground(QRegion region) | 192 | void SceneQPainter::paintBackground(QRegion region) | ||
198 | { | 193 | { | ||
199 | m_painter->setBrush(Qt::black); | 194 | m_painter->setBrush(Qt::black); | ||
200 | m_painter->drawRects(region.rects()); | 195 | m_painter->drawRects(region.rects()); | ||
201 | } | 196 | } | ||
202 | 197 | | |||
198 | void SceneQPainter::paintCursor() | ||||
199 | { | ||||
200 | if (!kwinApp()->platform()->usesSoftwareCursor()) { | ||||
201 | return; | ||||
202 | } | ||||
203 | const QImage img = kwinApp()->platform()->softwareCursor(); | ||||
204 | if (img.isNull()) { | ||||
205 | return; | ||||
206 | } | ||||
207 | const QPoint cursorPos = Cursor::pos(); | ||||
208 | const QPoint hotspot = kwinApp()->platform()->softwareCursorHotspot(); | ||||
209 | m_painter->drawImage(cursorPos - hotspot, img); | ||||
210 | kwinApp()->platform()->markCursorAsRendered(); | ||||
211 | } | ||||
212 | | ||||
203 | Scene::Window *SceneQPainter::createWindow(Toplevel *toplevel) | 213 | Scene::Window *SceneQPainter::createWindow(Toplevel *toplevel) | ||
204 | { | 214 | { | ||
205 | return new SceneQPainter::Window(this, toplevel); | 215 | return new SceneQPainter::Window(this, toplevel); | ||
206 | } | 216 | } | ||
207 | 217 | | |||
208 | Scene::EffectFrame *SceneQPainter::createEffectFrame(EffectFrameImpl *frame) | 218 | Scene::EffectFrame *SceneQPainter::createEffectFrame(EffectFrameImpl *frame) | ||
209 | { | 219 | { | ||
210 | return new QPainterEffectFrame(frame, this); | 220 | return new QPainterEffectFrame(frame, this); | ||
▲ Show 20 Lines • Show All 449 Lines • Show Last 20 Lines |