Make bool arguments to QWidgetBackingStore::markDirty enums
This is so we get some typesafty when refactoring, and I think it makes the code more readable Change-Id: Ia7531950d5f780dc98f4eb435c1e0050d76cdb5f Reviewed-by: Paul Olav Tvete <paul.tvete@digia.com>bb10
parent
4bf27a24c0
commit
d4a4ef9e38
|
|
@ -9888,7 +9888,7 @@ void QWidget::repaint(const QRect &rect)
|
|||
QTLWExtra *tlwExtra = window()->d_func()->maybeTopData();
|
||||
if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) {
|
||||
tlwExtra->inRepaint = true;
|
||||
tlwExtra->backingStoreTracker->markDirty(rect, this, true);
|
||||
tlwExtra->backingStoreTracker->markDirty(rect, this, QWidgetBackingStore::UpdateNow);
|
||||
tlwExtra->inRepaint = false;
|
||||
}
|
||||
} else {
|
||||
|
|
@ -9917,7 +9917,7 @@ void QWidget::repaint(const QRegion &rgn)
|
|||
QTLWExtra *tlwExtra = window()->d_func()->maybeTopData();
|
||||
if (tlwExtra && !tlwExtra->inTopLevelResize && tlwExtra->backingStore) {
|
||||
tlwExtra->inRepaint = true;
|
||||
tlwExtra->backingStoreTracker->markDirty(rgn, this, true);
|
||||
tlwExtra->backingStoreTracker->markDirty(rgn, this, QWidgetBackingStore::UpdateNow);
|
||||
tlwExtra->inRepaint = false;
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
|
|
@ -443,17 +443,21 @@ QRegion QWidgetBackingStore::staticContents(QWidget *parent, const QRect &within
|
|||
return region;
|
||||
}
|
||||
|
||||
void QWidgetBackingStore::sendUpdateRequest(QWidget *widget, bool updateImmediately)
|
||||
void QWidgetBackingStore::sendUpdateRequest(QWidget *widget, UpdateTime updateTime)
|
||||
{
|
||||
if (!widget)
|
||||
return;
|
||||
|
||||
if (updateImmediately) {
|
||||
QEvent event(QEvent::UpdateRequest);
|
||||
QApplication::sendEvent(widget, &event);
|
||||
} else {
|
||||
switch (updateTime) {
|
||||
case UpdateLater:
|
||||
updateRequestSent = true;
|
||||
QApplication::postEvent(widget, new QEvent(QEvent::UpdateRequest), Qt::LowEventPriority);
|
||||
break;
|
||||
case UpdateNow: {
|
||||
QEvent event(QEvent::UpdateRequest);
|
||||
QApplication::sendEvent(widget, &event);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -461,17 +465,17 @@ void QWidgetBackingStore::sendUpdateRequest(QWidget *widget, bool updateImmediat
|
|||
Marks the region of the widget as dirty (if not already marked as dirty) and
|
||||
posts an UpdateRequest event to the top-level widget (if not already posted).
|
||||
|
||||
If updateImmediately is true, the event is sent immediately instead of posted.
|
||||
If updateTime is UpdateNow, the event is sent immediately instead of posted.
|
||||
|
||||
If invalidateBuffer is true, all widgets intersecting with the region will be dirty.
|
||||
If bufferState is BufferInvalid, all widgets intersecting with the region will be dirty.
|
||||
|
||||
If the widget paints directly on screen, the event is sent to the widget
|
||||
instead of the top-level widget, and invalidateBuffer is completely ignored.
|
||||
instead of the top-level widget, and bufferState is completely ignored.
|
||||
|
||||
### Qt 4.6: Merge into a template function (after MSVC isn't supported anymore).
|
||||
*/
|
||||
void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget, bool updateImmediately,
|
||||
bool invalidateBuffer)
|
||||
void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget,
|
||||
UpdateTime updateTime, BufferState bufferState)
|
||||
{
|
||||
Q_ASSERT(tlw->d_func()->extra);
|
||||
Q_ASSERT(tlw->d_func()->extra->topextra);
|
||||
|
|
@ -487,44 +491,44 @@ void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget, bool up
|
|||
if (widget->d_func()->paintOnScreen()) {
|
||||
if (widget->d_func()->dirty.isEmpty()) {
|
||||
widget->d_func()->dirty = rgn;
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return;
|
||||
} else if (qt_region_strictContains(widget->d_func()->dirty, widget->rect())) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return; // Already dirty.
|
||||
}
|
||||
|
||||
const bool eventAlreadyPosted = !widget->d_func()->dirty.isEmpty();
|
||||
widget->d_func()->dirty += rgn;
|
||||
if (!eventAlreadyPosted || updateImmediately)
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
if (!eventAlreadyPosted || updateTime == UpdateNow)
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
//### FIXME fullUpdatePending seems to be always false????
|
||||
if (fullUpdatePending) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
const QPoint offset = widget->mapTo(tlw, QPoint());
|
||||
|
||||
if (QWidgetPrivate::get(widget)->renderToTexture) {
|
||||
if (!updateRequestSent || updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (!updateRequestSent || updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
const QRect widgetRect = widget->d_func()->effectiveRectFor(widget->rect());
|
||||
if (qt_region_strictContains(dirty, widgetRect.translated(offset))) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return; // Already dirty.
|
||||
}
|
||||
|
||||
if (invalidateBuffer) {
|
||||
if (bufferState == BufferInvalid) {
|
||||
const bool eventAlreadyPosted = !dirty.isEmpty() || updateRequestSent;
|
||||
#ifndef QT_NO_GRAPHICSEFFECT
|
||||
if (widget->d_func()->graphicsEffect)
|
||||
|
|
@ -532,14 +536,14 @@ void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget, bool up
|
|||
else
|
||||
#endif //QT_NO_GRAPHICSEFFECT
|
||||
dirty += rgn.translated(offset);
|
||||
if (!eventAlreadyPosted || updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (!eventAlreadyPosted || updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dirtyWidgets.isEmpty()) {
|
||||
addDirtyWidget(widget, rgn);
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -556,8 +560,8 @@ void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget, bool up
|
|||
addDirtyWidget(widget, rgn);
|
||||
}
|
||||
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -567,8 +571,8 @@ void QWidgetBackingStore::markDirty(const QRegion &rgn, QWidget *widget, bool up
|
|||
|
||||
### Qt 4.6: Merge into a template function (after MSVC isn't supported anymore).
|
||||
*/
|
||||
void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget, bool updateImmediately,
|
||||
bool invalidateBuffer)
|
||||
void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget,
|
||||
UpdateTime updateTime, BufferState bufferState)
|
||||
{
|
||||
Q_ASSERT(tlw->d_func()->extra);
|
||||
Q_ASSERT(tlw->d_func()->extra->topextra);
|
||||
|
|
@ -584,30 +588,30 @@ void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget, bool upd
|
|||
if (widget->d_func()->paintOnScreen()) {
|
||||
if (widget->d_func()->dirty.isEmpty()) {
|
||||
widget->d_func()->dirty = QRegion(rect);
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return;
|
||||
} else if (qt_region_strictContains(widget->d_func()->dirty, rect)) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return; // Already dirty.
|
||||
}
|
||||
|
||||
const bool eventAlreadyPosted = !widget->d_func()->dirty.isEmpty();
|
||||
widget->d_func()->dirty += rect;
|
||||
if (!eventAlreadyPosted || updateImmediately)
|
||||
sendUpdateRequest(widget, updateImmediately);
|
||||
if (!eventAlreadyPosted || updateTime == UpdateNow)
|
||||
sendUpdateRequest(widget, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
if (fullUpdatePending) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
if (QWidgetPrivate::get(widget)->renderToTexture) {
|
||||
if (!updateRequestSent || updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (!updateRequestSent || updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -615,22 +619,22 @@ void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget, bool upd
|
|||
const QRect widgetRect = widget->d_func()->effectiveRectFor(rect);
|
||||
const QRect translatedRect(widgetRect.translated(widget->mapTo(tlw, QPoint())));
|
||||
if (qt_region_strictContains(dirty, translatedRect)) {
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return; // Already dirty
|
||||
}
|
||||
|
||||
if (invalidateBuffer) {
|
||||
if (bufferState == BufferInvalid) {
|
||||
const bool eventAlreadyPosted = !dirty.isEmpty();
|
||||
dirty += translatedRect;
|
||||
if (!eventAlreadyPosted || updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (!eventAlreadyPosted || updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
if (dirtyWidgets.isEmpty()) {
|
||||
addDirtyWidget(widget, rect);
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -641,8 +645,8 @@ void QWidgetBackingStore::markDirty(const QRect &rect, QWidget *widget, bool upd
|
|||
addDirtyWidget(widget, rect);
|
||||
}
|
||||
|
||||
if (updateImmediately)
|
||||
sendUpdateRequest(tlw, updateImmediately);
|
||||
if (updateTime == UpdateNow)
|
||||
sendUpdateRequest(tlw, updateTime);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -1346,7 +1350,8 @@ void QWidgetPrivate::invalidateBuffer(const QRegion &rgn)
|
|||
if (wrgn.isEmpty())
|
||||
return;
|
||||
|
||||
tlwExtra->backingStoreTracker->markDirty(wrgn, q, false, true);
|
||||
tlwExtra->backingStoreTracker->markDirty(wrgn, q,
|
||||
QWidgetBackingStore::UpdateLater, QWidgetBackingStore::BufferInvalid);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -1370,7 +1375,8 @@ void QWidgetPrivate::invalidateBuffer(const QRect &rect)
|
|||
return;
|
||||
|
||||
if (graphicsEffect || !extra || !extra->hasMask) {
|
||||
tlwExtra->backingStoreTracker->markDirty(wRect, q, false, true);
|
||||
tlwExtra->backingStoreTracker->markDirty(wRect, q,
|
||||
QWidgetBackingStore::UpdateLater, QWidgetBackingStore::BufferInvalid);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1379,7 +1385,8 @@ void QWidgetPrivate::invalidateBuffer(const QRect &rect)
|
|||
if (wRgn.isEmpty())
|
||||
return;
|
||||
|
||||
tlwExtra->backingStoreTracker->markDirty(wRgn, q, false, true);
|
||||
tlwExtra->backingStoreTracker->markDirty(wRgn, q,
|
||||
QWidgetBackingStore::UpdateLater, QWidgetBackingStore::BufferInvalid);
|
||||
}
|
||||
|
||||
void QWidgetPrivate::repaint_sys(const QRegion &rgn)
|
||||
|
|
|
|||
|
|
@ -93,6 +93,16 @@ private:
|
|||
class Q_AUTOTEST_EXPORT QWidgetBackingStore
|
||||
{
|
||||
public:
|
||||
enum UpdateTime {
|
||||
UpdateNow,
|
||||
UpdateLater
|
||||
};
|
||||
|
||||
enum BufferState{
|
||||
BufferValid,
|
||||
BufferInvalid
|
||||
};
|
||||
|
||||
QWidgetBackingStore(QWidget *t);
|
||||
~QWidgetBackingStore();
|
||||
|
||||
|
|
@ -112,10 +122,10 @@ public:
|
|||
}
|
||||
|
||||
// ### Qt 4.6: Merge into a template function (after MSVC isn't supported anymore).
|
||||
void markDirty(const QRegion &rgn, QWidget *widget, bool updateImmediately = false,
|
||||
bool invalidateBuffer = false);
|
||||
void markDirty(const QRect &rect, QWidget *widget, bool updateImmediately = false,
|
||||
bool invalidateBuffer = false);
|
||||
void markDirty(const QRegion &rgn, QWidget *widget, UpdateTime updateTime = UpdateLater,
|
||||
BufferState bufferState = BufferValid);
|
||||
void markDirty(const QRect &rect, QWidget *widget, UpdateTime updateTime = UpdateLater,
|
||||
BufferState bufferState = BufferValid);
|
||||
|
||||
private:
|
||||
QWidget *tlw;
|
||||
|
|
@ -134,7 +144,7 @@ private:
|
|||
|
||||
QPlatformTextureListWatcher *textureListWatcher;
|
||||
|
||||
void sendUpdateRequest(QWidget *widget, bool updateImmediately);
|
||||
void sendUpdateRequest(QWidget *widget, UpdateTime updateTime);
|
||||
|
||||
static bool flushPaint(QWidget *widget, const QRegion &rgn);
|
||||
static void unflushPaint(QWidget *widget, const QRegion &rgn);
|
||||
|
|
|
|||
Loading…
Reference in New Issue