Optimize the QPalette::resolve from the other palette
If all the palette's colors are resolved, nothing needs to be done in QPalette::resolve(const QPalette &other). Change-Id: I1573cfa5b5cd1e7eb15f3242aff6ab92e9f8c84b Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io>bb10
parent
5165b89e2b
commit
7a5d7e8440
|
|
@ -921,6 +921,17 @@ qint64 QPalette::cacheKey() const
|
|||
return (((qint64) d->ser_no) << 32) | ((qint64) (d->detach_no));
|
||||
}
|
||||
|
||||
static constexpr QPalette::ResolveMask allResolveMask()
|
||||
{
|
||||
QPalette::ResolveMask mask = {0};
|
||||
for (int role = 0; role < int(QPalette::NColorRoles); ++role) {
|
||||
for (int grp = 0; grp < int(QPalette::NColorGroups); ++grp) {
|
||||
mask |= (QPalette::ResolveMask(1) << bitPosition(QPalette::ColorGroup(grp), QPalette::ColorRole(role)));
|
||||
}
|
||||
}
|
||||
return mask;
|
||||
}
|
||||
|
||||
/*!
|
||||
Returns a new QPalette that is a union of this instance and \a other.
|
||||
Color roles set in this instance take precedence.
|
||||
|
|
@ -934,6 +945,9 @@ QPalette QPalette::resolve(const QPalette &other) const
|
|||
return o;
|
||||
}
|
||||
|
||||
if (d->resolveMask == allResolveMask())
|
||||
return *this;
|
||||
|
||||
QPalette palette(*this);
|
||||
palette.detach();
|
||||
|
||||
|
|
|
|||
|
|
@ -122,6 +122,14 @@ void tst_QPalette::resolve()
|
|||
|
||||
QVERIFY(p2ResolvedTo1 != p1);
|
||||
QVERIFY(p2ResolvedTo1 != p2);
|
||||
|
||||
QPalette p3;
|
||||
// ensure the resolve mask is full
|
||||
for (int r = 0; r < QPalette::NColorRoles; ++r)
|
||||
p3.setBrush(QPalette::All, QPalette::ColorRole(r), Qt::red);
|
||||
|
||||
QPalette p3ResolvedToP1 = p3.resolve(p1);
|
||||
QVERIFY(p3ResolvedToP1.isCopyOf(p3));
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue