diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2019-08-22 17:11:56 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2019-08-25 23:14:17 +0200 |
commit | ca3b48539d4f5d61818cea84c8aa513d3956b9f2 (patch) | |
tree | 9e55c97ad3ccdbad6ab8011cc72ae4ee946acc56 /src/widgets/kernel/qwidgetrepaintmanager.cpp | |
parent | 655e8b6eab04f6db70ebaf2005ef297ea80784de (diff) |
widgets: Share more code in appendDirtyOnScreenWidget
Change-Id: I0ed936c7d8b004d498a8956b1ba246ade41ce43d
Reviewed-by: Paul Olav Tvete <paul.tvete@qt.io>
Diffstat (limited to 'src/widgets/kernel/qwidgetrepaintmanager.cpp')
-rw-r--r-- | src/widgets/kernel/qwidgetrepaintmanager.cpp | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/src/widgets/kernel/qwidgetrepaintmanager.cpp b/src/widgets/kernel/qwidgetrepaintmanager.cpp index c4e557fb2f..7445255ad4 100644 --- a/src/widgets/kernel/qwidgetrepaintmanager.cpp +++ b/src/widgets/kernel/qwidgetrepaintmanager.cpp @@ -922,9 +922,6 @@ void QWidgetRepaintManager::paintAndFlush() if (hasPlatformWindow(w) || (npw && npw != tlw)) { if (!hasPlatformWindow(w)) w = npw; - QWidgetPrivate *wPrivate = w->d_func(); - if (!wPrivate->needsFlush) - wPrivate->needsFlush = new QRegion; appendDirtyOnScreenWidget(w); } } @@ -1039,29 +1036,27 @@ void QWidgetRepaintManager::markDirtyOnScreen(const QRegion ®ion, QWidget *wi return; } - // Alien widgets with native parent != tlw. - QWidgetPrivate *nativeParentPrivate = nativeParent->d_func(); - if (!nativeParentPrivate->needsFlush) - nativeParentPrivate->needsFlush = new QRegion; + // Alien widgets with native parent != tlw const QPoint nativeParentOffset = widget->mapTo(nativeParent, QPoint()); - *nativeParentPrivate->needsFlush += region.translated(nativeParentOffset); - appendDirtyOnScreenWidget(nativeParent); + appendDirtyOnScreenWidget(nativeParent, region.translated(nativeParentOffset)); return; } - // Native child widgets. - QWidgetPrivate *widgetPrivate = widget->d_func(); - if (!widgetPrivate->needsFlush) - widgetPrivate->needsFlush = new QRegion; - *widgetPrivate->needsFlush += region; - appendDirtyOnScreenWidget(widget); + // Native child widgets + appendDirtyOnScreenWidget(widget, region); } -void QWidgetRepaintManager::appendDirtyOnScreenWidget(QWidget *widget) +void QWidgetRepaintManager::appendDirtyOnScreenWidget(QWidget *widget, const QRegion ®ion) { if (!widget) return; + auto *widgetPrivate = qt_widget_private(widget); + if (!widgetPrivate->needsFlush) + widgetPrivate->needsFlush = new QRegion; + + *widgetPrivate->needsFlush += region; + if (!dirtyOnScreenWidgets.contains(widget)) dirtyOnScreenWidgets.append(widget); } |