diff options
author | JiDe Zhang <zhangjide@uniontech.com> | 2022-03-07 18:18:27 +0800 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2022-04-28 09:24:39 +0200 |
commit | 7a5d7e8440a1e4beec49b751d0ecacdf55aa45d5 (patch) | |
tree | 02c9e23ef79a51097c58481dc4d79584c465b6e2 /src/gui/kernel | |
parent | 5165b89e2b88e773ae3deba0df9166a75b9ef017 (diff) |
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>
Diffstat (limited to 'src/gui/kernel')
-rw-r--r-- | src/gui/kernel/qpalette.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/gui/kernel/qpalette.cpp b/src/gui/kernel/qpalette.cpp index 22ba5f3bcd..5a0bad9159 100644 --- a/src/gui/kernel/qpalette.cpp +++ b/src/gui/kernel/qpalette.cpp @@ -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(); |