summaryrefslogtreecommitdiff
path: root/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/designer/src/lib/shared/qdesigner_propertycommand.cpp')
-rw-r--r--src/designer/src/lib/shared/qdesigner_propertycommand.cpp66
1 files changed, 30 insertions, 36 deletions
diff --git a/src/designer/src/lib/shared/qdesigner_propertycommand.cpp b/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
index 866834a7e..814c439d3 100644
--- a/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
+++ b/src/designer/src/lib/shared/qdesigner_propertycommand.cpp
@@ -251,36 +251,30 @@ quint64 compareSubProperties(const QFont & f1, const QFont & f2)
return rc;
}
-// Compare colors of a role
-bool roleColorChanged(const QPalette & p1, const QPalette & p2, QPalette::ColorRole role)
-{
- for (int group = QPalette::Active; group < QPalette::NColorGroups; group++) {
- const QPalette::ColorGroup pgroup = static_cast<QPalette::ColorGroup>(group);
- if (p1.color(pgroup, role) != p2.color(pgroup, role))
- return true;
- }
- return false;
-}
// find changed subproperties of a QPalette taking the [undocumented] resolve flags into account
quint64 compareSubProperties(const QPalette & p1, const QPalette & p2)
{
quint64 rc = 0;
- unsigned maskBit = 1u;
// generate a mask for each role
const auto p1Changed = p1.resolveMask();
const auto p2Changed = p2.resolveMask();
- for (int role = QPalette::WindowText; role < QPalette::NColorRoles; role++, maskBit <<= 1u) {
- const bool p1RoleChanged = p1Changed & maskBit;
- const bool p2RoleChanged = p2Changed & maskBit;
- // Role has been set/reset in editor
- if (p1RoleChanged != p2RoleChanged) {
- rc |= maskBit;
- } else {
- // Was modified in both palettes: Compare values.
- if (p1RoleChanged && p2RoleChanged && roleColorChanged(p1, p2, static_cast<QPalette::ColorRole>(role)))
+
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ const auto maskBit = qdesigner_internal::paletteResolveMask(group, role);
+ const bool p1RoleChanged = p1Changed & maskBit;
+ const bool p2RoleChanged = p2Changed & maskBit;
+ if (p1RoleChanged != p2RoleChanged // Role has been set/reset in editor
+ // Was modified in both palettes: Compare values.
+ || (p1RoleChanged && p2RoleChanged
+ && p1.brush(group, role).color() != p2.brush(group, role).color())) {
rc |= maskBit;
+ }
}
}
+
return rc;
}
@@ -463,23 +457,23 @@ QPalette applyPaletteSubProperty(const QPalette &oldValue, const QPalette &newVa
quint64 mask)
{
QPalette rc = oldValue;
- // apply a mask for each role
- quint64 maskBit = 1u;
- for (int role = QPalette::WindowText; role < QPalette::NColorRoles; role++, maskBit <<= 1u) {
- if (mask & maskBit) {
- for (int group = QPalette::Active; group < QPalette::NColorGroups; group++) {
- const QPalette::ColorGroup pgroup = static_cast<QPalette::ColorGroup>(group);
- const QPalette::ColorRole prole = static_cast<QPalette::ColorRole>(role);
- rc.setColor(pgroup, prole, newValue.color(pgroup, prole));
+ // apply a mask for each role/group
+ for (int r = 0; r < static_cast<int>(QPalette::NColorRoles); ++r) {
+ for (int g = 0; g < static_cast<int>(QPalette::NColorGroups); ++g) {
+ const auto role = static_cast<QPalette::ColorRole>(r);
+ const auto group = static_cast<QPalette::ColorGroup>(g);
+ const auto maskBit = qdesigner_internal::paletteResolveMask(group, role);
+ if (mask & maskBit) {
+ rc.setColor(group, role, newValue.color(group, role));
+ // Set the resolve bit from NewValue in return value
+ auto resolveMask = rc.resolveMask();
+ const bool origFlag = newValue.resolveMask() & maskBit;
+ if (origFlag)
+ resolveMask |= maskBit;
+ else
+ resolveMask &= ~maskBit;
+ rc.setResolveMask(resolveMask);
}
- // Set the resolve bit from NewValue in return value
- auto r = rc.resolveMask();
- const bool origFlag = newValue.resolveMask() & maskBit;
- if (origFlag)
- r |= maskBit;
- else
- r &= ~maskBit;
- rc.setResolveMask(r);
}
}
return rc;