50 mWindowStack.prepend(window);
51 if (!mPendingBackingStores.isEmpty()) {
53 for (
int i = 0; i < mPendingBackingStores.size(); ++i) {
57 if (bs->window() == window->window()) {
59 mPendingBackingStores.removeAt(i);
64 setDirty(window->geometry());
65 QWindow *w = topWindow();
66 QWindowSystemInterface::handleFocusWindowChanged(w);
81 int index = mWindowStack.indexOf(window);
84 mWindowStack.move(index, 0);
85 setDirty(window->geometry());
86 QWindow *w = topWindow();
87 QWindowSystemInterface::handleFocusWindowChanged(w);
93 int index = mWindowStack.indexOf(window);
94 if (index == -1 || index == (mWindowStack.size() - 1))
96 mWindowStack.move(index, mWindowStack.size() - 1);
97 setDirty(window->geometry());
98 QWindow *w = topWindow();
99 QWindowSystemInterface::handleFocusWindowChanged(w);
164 const QPoint screenOffset = mGeometry.topLeft();
166 QRegion touchedRegion;
168 const QRect lastCursor =
mCursor->dirtyRect();
169 mRepaintRegion += lastCursor;
171 if (mRepaintRegion.isEmpty() && (!mCursor || !mCursor->isDirty()))
172 return touchedRegion;
175 mPainter =
new QPainter(&mScreenImage);
177 const QRect screenRect = mGeometry.translated(-screenOffset);
178 for (QRect rect : mRepaintRegion) {
179 rect = rect.intersected(screenRect);
183 mPainter->setCompositionMode(QPainter::CompositionMode_Source);
184 mPainter->fillRect(rect, mScreenImage.hasAlphaChannel() ? Qt::transparent : Qt::black);
186 for (
int layerIndex = mWindowStack.size() - 1; layerIndex != -1; layerIndex--) {
187 if (!mWindowStack[layerIndex]->window()->isVisible())
190 const QRect windowRect = mWindowStack[layerIndex]->geometry().translated(-screenOffset);
191 const QRect windowIntersect = rect.translated(-windowRect.left(), -windowRect.top());
192 QFbBackingStore *backingStore = mWindowStack[layerIndex]->backingStore();
194 backingStore->lock();
195 mPainter->drawImage(rect, backingStore->image(), windowIntersect);
196 backingStore->unlock();
201 if (mCursor && (mCursor->isDirty() || mRepaintRegion.intersects(mCursor->lastPainted()))) {
202 mPainter->setCompositionMode(QPainter::CompositionMode_SourceOver);
203 touchedRegion +=
mCursor->drawCursor(*mPainter);
205 touchedRegion += mRepaintRegion;
206 mRepaintRegion = QRegion();
208 return touchedRegion;