mirror of
https://bitbucket.org/smil3y/katie.git
synced 2025-02-24 10:52:56 +00:00
QWidgetBackingStore and BeginPaintInfo cleanup
Signed-off-by: Ivailo Monev <xakepa10@laimg.moc>
This commit is contained in:
parent
f549af07e3
commit
64fcbb67a6
2 changed files with 27 additions and 44 deletions
|
@ -311,8 +311,7 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const
|
|||
|
||||
// Calculate the region that needs repaint.
|
||||
QRegion r(dirty);
|
||||
for (int i = 0; i < dirtyWidgets.size(); ++i) {
|
||||
QWidget *w = dirtyWidgets.at(i);
|
||||
foreach (QWidget *w, dirtyWidgets) {
|
||||
if (widgetDirty && w != widget && !widget->isAncestorOf(w))
|
||||
continue;
|
||||
r += w->d_func()->dirty.translated(w->mapTo(tlw, QPoint()));
|
||||
|
@ -321,15 +320,13 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const
|
|||
// Append the region that needs flush.
|
||||
r += dirtyOnScreen;
|
||||
|
||||
if (dirtyOnScreenWidgets) { // Only in use with native child widgets.
|
||||
for (int i = 0; i < dirtyOnScreenWidgets->size(); ++i) {
|
||||
QWidget *w = dirtyOnScreenWidgets->at(i);
|
||||
if (widgetDirty && w != widget && !widget->isAncestorOf(w))
|
||||
continue;
|
||||
QWidgetPrivate *wd = w->d_func();
|
||||
Q_ASSERT(wd->needsFlush);
|
||||
r += wd->needsFlush->translated(w->mapTo(tlw, QPoint()));
|
||||
}
|
||||
// Only in use with native child widgets.
|
||||
foreach (QWidget *w, dirtyOnScreenWidgets) {
|
||||
if (widgetDirty && w != widget && !widget->isAncestorOf(w))
|
||||
continue;
|
||||
QWidgetPrivate *wd = w->d_func();
|
||||
Q_ASSERT(wd->needsFlush);
|
||||
r += wd->needsFlush->translated(w->mapTo(tlw, QPoint()));
|
||||
}
|
||||
|
||||
if (widgetDirty) {
|
||||
|
@ -679,8 +676,8 @@ void QWidgetBackingStore::updateLists(QWidget *cur)
|
|||
}
|
||||
|
||||
QWidgetBackingStore::QWidgetBackingStore(QWidget *topLevel)
|
||||
: tlw(topLevel), dirtyOnScreenWidgets(0), hasDirtyFromPreviousSync(false)
|
||||
, fullUpdatePending(0)
|
||||
: tlw(topLevel)
|
||||
, fullUpdatePending(false)
|
||||
{
|
||||
windowSurface = tlw->windowSurface();
|
||||
if (!windowSurface)
|
||||
|
@ -705,8 +702,6 @@ QWidgetBackingStore::~QWidgetBackingStore()
|
|||
|
||||
delete windowSurface;
|
||||
windowSurface = 0;
|
||||
delete dirtyOnScreenWidgets;
|
||||
dirtyOnScreenWidgets = 0;
|
||||
}
|
||||
|
||||
//parent's coordinates; move whole rect; update parent and widget
|
||||
|
@ -980,9 +975,6 @@ void QWidgetBackingStore::sync()
|
|||
if (updatesDisabled)
|
||||
return;
|
||||
|
||||
if (hasDirtyFromPreviousSync)
|
||||
dirty += dirtyFromPreviousSync;
|
||||
|
||||
// Contains everything that needs repaint.
|
||||
QRegion toClean(dirty);
|
||||
|
||||
|
@ -1188,17 +1180,16 @@ void QWidgetBackingStore::flush(QWidget *widget, QWindowSurface *surface)
|
|||
dirtyOnScreen = QRegion();
|
||||
}
|
||||
|
||||
if (!dirtyOnScreenWidgets || dirtyOnScreenWidgets->isEmpty())
|
||||
if (dirtyOnScreenWidgets.isEmpty())
|
||||
return;
|
||||
|
||||
for (int i = 0; i < dirtyOnScreenWidgets->size(); ++i) {
|
||||
QWidget *w = dirtyOnScreenWidgets->at(i);
|
||||
foreach (QWidget *w, dirtyOnScreenWidgets) {
|
||||
QWidgetPrivate *wd = w->d_func();
|
||||
Q_ASSERT(wd->needsFlush);
|
||||
qt_flush(w, *wd->needsFlush, windowSurface, tlw, tlwOffset);
|
||||
*wd->needsFlush = QRegion();
|
||||
}
|
||||
dirtyOnScreenWidgets->clear();
|
||||
dirtyOnScreenWidgets.clear();
|
||||
}
|
||||
|
||||
static inline bool discardInvalidateBufferRequest(QWidget *widget, QTLWExtra *tlwExtra)
|
||||
|
|
|
@ -63,10 +63,10 @@ QT_BEGIN_NAMESPACE
|
|||
class QWindowSurface;
|
||||
|
||||
struct BeginPaintInfo {
|
||||
inline BeginPaintInfo() : wasFlushed(0), nothingToPaint(0), windowSurfaceRecreated(0) {}
|
||||
uint wasFlushed : 1;
|
||||
uint nothingToPaint : 1;
|
||||
uint windowSurfaceRecreated : 1;
|
||||
inline BeginPaintInfo() : wasFlushed(false), nothingToPaint(false), windowSurfaceRecreated(false) {}
|
||||
bool wasFlushed;
|
||||
bool nothingToPaint;
|
||||
bool windowSurfaceRecreated;
|
||||
};
|
||||
|
||||
class Q_AUTOTEST_EXPORT QWidgetBackingStore
|
||||
|
@ -87,8 +87,7 @@ public:
|
|||
|
||||
inline bool isDirty() const
|
||||
{
|
||||
return !(dirtyWidgets.isEmpty() && dirty.isEmpty() && !hasDirtyFromPreviousSync
|
||||
&& !fullUpdatePending);
|
||||
return !(dirtyWidgets.isEmpty() && dirty.isEmpty() && !fullUpdatePending);
|
||||
}
|
||||
|
||||
// ### Qt 4.6: Merge into a template function (after MSVC isn't supported anymore).
|
||||
|
@ -101,16 +100,14 @@ private:
|
|||
QWidget *tlw;
|
||||
QRegion dirtyOnScreen; // needsFlush
|
||||
QRegion dirty; // needsRepaint
|
||||
QRegion dirtyFromPreviousSync;
|
||||
QVector<QWidget *> dirtyWidgets;
|
||||
QVector<QWidget *> *dirtyOnScreenWidgets;
|
||||
QVector<QWidget *> dirtyOnScreenWidgets;
|
||||
QList<QWidget *> staticWidgets;
|
||||
QWindowSurface *windowSurface;
|
||||
#ifdef Q_BACKINGSTORE_SUBSURFACES
|
||||
QList<QWindowSurface*> subSurfaces;
|
||||
#endif
|
||||
uint hasDirtyFromPreviousSync : 1;
|
||||
uint fullUpdatePending : 1;
|
||||
bool fullUpdatePending;
|
||||
|
||||
QPoint tlwOffset;
|
||||
|
||||
|
@ -199,25 +196,20 @@ private:
|
|||
if (!widget)
|
||||
return;
|
||||
|
||||
if (!dirtyOnScreenWidgets) {
|
||||
dirtyOnScreenWidgets = new QVector<QWidget *>;
|
||||
dirtyOnScreenWidgets->append(widget);
|
||||
} else if (!dirtyOnScreenWidgets->contains(widget)) {
|
||||
dirtyOnScreenWidgets->append(widget);
|
||||
if (!dirtyOnScreenWidgets.contains(widget)) {
|
||||
dirtyOnScreenWidgets.append(widget);
|
||||
}
|
||||
}
|
||||
|
||||
inline void dirtyOnScreenWidgetsRemoveAll(QWidget *widget)
|
||||
{
|
||||
if (!widget || !dirtyOnScreenWidgets)
|
||||
if (!widget)
|
||||
return;
|
||||
|
||||
int i = 0;
|
||||
while (i < dirtyOnScreenWidgets->size()) {
|
||||
if (dirtyOnScreenWidgets->at(i) == widget)
|
||||
dirtyOnScreenWidgets->remove(i);
|
||||
else
|
||||
++i;
|
||||
for (int i = 0; i < dirtyOnScreenWidgets.size(); ++i) {
|
||||
if (dirtyOnScreenWidgets.at(i) == widget) {
|
||||
dirtyOnScreenWidgets.remove(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue