diff options
author | Marc Mutz <marc.mutz@kdab.com> | 2017-02-24 00:56:55 +0100 |
---|---|---|
committer | Marc Mutz <marc.mutz@kdab.com> | 2017-03-08 07:19:53 +0000 |
commit | da730c90a35cce4b24f3cb0cb61246aa87b18e66 (patch) | |
tree | 6cec054b4910f661bbadad6621fecdda12dcd50f /src/widgets/styles/qstylesheetstyle_p.h | |
parent | a12a3c6c8c07c0fe52589cea473ac95e556052c7 (diff) |
QStyleSheetStyle: introduce class Tampered<QPalette|QFont>
... as a replacement for two QPairs and move some common
QFont/QPalette functionality into it.
Change-Id: Iaab92130dd54eaa7900ac2048014a80cbd04bfb6
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'src/widgets/styles/qstylesheetstyle_p.h')
-rw-r--r-- | src/widgets/styles/qstylesheetstyle_p.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/src/widgets/styles/qstylesheetstyle_p.h b/src/widgets/styles/qstylesheetstyle_p.h index 55dd2df329..2d302305bd 100644 --- a/src/widgets/styles/qstylesheetstyle_p.h +++ b/src/widgets/styles/qstylesheetstyle_p.h @@ -189,12 +189,31 @@ public: QHash<const QObject *, QRenderRules> renderRulesCache; QHash<const void *, QCss::StyleSheet> styleSheetCache; // parsed style sheets QSet<const QWidget *> autoFillDisabledWidgets; - // widgets whose palettes and fonts we have tampered. stored value pair is - // QPair<old widget value, resolve mask of stylesheet value> - QHash<const QWidget *, QPair<QPalette, uint> > customPaletteWidgets; - QHash<const QWidget *, QPair<QFont, uint> > customFontWidgets; + // widgets with whose palettes and fonts we have tampered: + template <typename T> + struct Tampered { + T oldWidgetValue; + uint resolveMask; + + // only call this function on an rvalue *this (it mangles oldWidgetValue) + T reverted(T current) +#ifdef Q_COMPILER_REF_QUALIFIERS + && +#endif + { + oldWidgetValue.resolve(oldWidgetValue.resolve() & resolveMask); + current.resolve(current.resolve() & ~resolveMask); + current.resolve(oldWidgetValue); + current.resolve(current.resolve() | oldWidgetValue.resolve()); + return current; + } + }; + QHash<const QWidget *, Tampered<QPalette>> customPaletteWidgets; + QHash<const QWidget *, Tampered<QFont>> customFontWidgets; }; - +template <typename T> +class QTypeInfo<QStyleSheetStyleCaches::Tampered<T>> + : QTypeInfoMerger<QStyleSheetStyleCaches::Tampered<T>, T> {}; QT_END_NAMESPACE #endif // QT_NO_STYLE_STYLESHEET |