diff options
author | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2019-11-22 14:26:12 +0100 |
---|---|---|
committer | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2020-01-02 15:46:38 +0100 |
commit | 045250ed4258932d7fbc13cdad163db1cd64dca7 (patch) | |
tree | c80899d987e6133ffe84405472ad43076774b12d /src/gui/kernel/qpalette.h | |
parent | deddafe0a6a32aa438cc36c7dcfae8c323274487 (diff) |
Fix QPalette::isBrushSet
The previous implementation did not take into account different color
groups in resolve mask. It led to some issues when resolving a
palette or checking whether a brush is set or not.
Task-number: QTBUG-78544
Change-Id: I9b67b2c444eb62c022643022a874dc400005e6ee
Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io>
Reviewed-by: Shawn Rutledge <shawn.rutledge@qt.io>
Diffstat (limited to 'src/gui/kernel/qpalette.h')
-rw-r--r-- | src/gui/kernel/qpalette.h | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/src/gui/kernel/qpalette.h b/src/gui/kernel/qpalette.h index d3a840d9ad..c95640d383 100644 --- a/src/gui/kernel/qpalette.h +++ b/src/gui/kernel/qpalette.h @@ -72,14 +72,12 @@ public: { other.d = nullptr; } inline QPalette &operator=(QPalette &&other) noexcept { - for_faster_swapping_dont_use = other.for_faster_swapping_dont_use; qSwap(d, other.d); return *this; } void swap(QPalette &other) noexcept { qSwap(d, other.d); - qSwap(for_faster_swapping_dont_use, other.for_faster_swapping_dont_use); } operator QVariant() const; @@ -103,8 +101,8 @@ public: }; Q_ENUM(ColorRole) - inline ColorGroup currentColorGroup() const { return static_cast<ColorGroup>(data.current_group); } - inline void setCurrentColorGroup(ColorGroup cg) { data.current_group = cg; } + inline ColorGroup currentColorGroup() const { return data.currentGroup; } + inline void setCurrentColorGroup(ColorGroup cg) { data.currentGroup = cg; } inline const QColor &color(ColorGroup cg, ColorRole cr) const { return brush(cg, cr).color(); } @@ -158,9 +156,11 @@ public: #endif qint64 cacheKey() const; - QPalette resolve(const QPalette &) const; - inline uint resolve() const { return data.resolve_mask; } - inline void resolve(uint mask) { data.resolve_mask = mask; } + QPalette resolve(const QPalette &other) const; + + using ResolveMask = quint64; + inline ResolveMask resolve() const { return data.resolveMask; } + inline void resolve(ResolveMask mask) { data.resolveMask = mask; } private: void setColorGroup(ColorGroup cr, const QBrush &windowText, const QBrush &button, @@ -185,13 +185,11 @@ private: QPalettePrivate *d; struct Data { - uint current_group : 4; - uint resolve_mask : 28; - }; - union { - Data data; - quint32 for_faster_swapping_dont_use; + ResolveMask resolveMask{0}; + ColorGroup currentGroup{Active}; }; + Data data; + friend Q_GUI_EXPORT QDataStream &operator<<(QDataStream &s, const QPalette &p); }; |