38 Q_DECLARE_PUBLIC(QStyleKitStyle)
58 struct MetricsCacheKey
60 QQStyleKitReader::ControlType type;
63 friend bool operator==(MetricsCacheKey lhs, MetricsCacheKey rhs)
noexcept
64 {
return lhs.type == rhs.type && lhs.state == rhs.state; }
65 friend size_t qHash(MetricsCacheKey key, size_t seed = 0)
noexcept
66 {
return qHashMulti(seed, key.type, key.state); }
73 struct QQStyleKitResolved
75 const QQStyleKitReader *reader =
nullptr;
76 const ControlMetrics *metrics =
nullptr;
77 const QWidget *widget =
nullptr;
79 bool isValid()
const {
return reader && metrics; }
81 const QQStyleKitDelegateProperties *background()
const;
89 struct QQStyleKitLayoutResolved
91 const ControlMetrics *metrics =
nullptr;
92 const QQStyleKitControlProperties *staticProps =
nullptr;
95 bool isValid()
const {
return metrics; }
97 const QQStyleKitDelegateProperties *background()
const;
100 QFont font()
const {
return staticFont; }
104 template <
typename T>
107 decltype(std::declval<T>().resolveMask()) resolveMask;
110 T reverted(T current) && {
111 oldWidgetValue.setResolveMask(oldWidgetValue.resolveMask() & resolveMask);
112 current.setResolveMask(current.resolveMask() & ~resolveMask);
113 current.resolve(oldWidgetValue);
114 current.setResolveMask(current.resolveMask() | oldWidgetValue.resolveMask());
120 QStyleKitStylePrivate();
125 QQStyleKitStyle *ensureDefaultStyle();
126 QQStyleKitStyle *effectiveStyle()
const;
128 void unsetStyleFont(QWidget *widget);
129 void setStyleFont(QWidget *widget,
const QFont &styleFont);
130 void refreshStyleFont(QWidget *widget);
132 void unsetStylePalette(QWidget *widget);
133 void setStylePalette(QWidget *widget,
const QPalette &stylePalette)
const;
134 void refreshStylePalette(QWidget *widget);
136 QQStyleKitReader *readerForWidget(
const QWidget *widget)
const;
137 void cleanupWidgetReader(
const QWidget *widget)
const;
139 QQStyleKitReader *readerForItemViewItem(
const QWidget *widget, quint64 itemKey)
const;
140 void cleanupItemViewItemReaders(
const QWidget *widget)
const;
141 static quint64 itemViewItemKeyForOption(
const QStyleOption *opt);
143 QQStyleKitReader *ensureSharedReader()
const;
145 QQSK::State resolvedStateFor(QQStyleKitReader::ControlType type, QStyle::State state)
const;
147 QQStyleKitResolved resolve(
const QWidget *w, QQStyleKitReader::ControlType type, QStyle::State state)
const;
148 QQStyleKitResolved resolveItemViewItem(
const QWidget *w,
const QStyleOption *opt,
149 QQStyleKitReader::ControlType type, QStyle::State state)
const;
151 QQStyleKitLayoutResolved resolveLayout(QQStyleKitReader::ControlType type,
152 QStyle::State state)
const;
154 const ControlMetrics &metricsFor(QQStyleKitReader::ControlType type, QQSK::State state)
const;
155 void clearMetricsCache();
157 ControlMetrics metricsForReader(QQStyleKitReader *reader)
const;
159 void drawControlIndicator(
const QQStyleKitDelegateProperties *indicator,
const QRectF &rect, QPainter *p)
const;
161 const QRect &rect,
const QString &text, uint textFlags,
163 Qt::Alignment defaultAlignment = Qt::AlignHCenter | Qt::AlignVCenter)
const;
164 void drawStyledItemRect(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
165 void drawStyledItemImage(
const QQStyleKitImageProperties *image,
const QRectF &rect,
166 qreal opacity, QPainter *p)
const;
168 QRect getAlignedRectInContainer(
const QRect &container,
const QSize &indicatorSize,
169 uint alignment,
const QMargins &padding,
170 const QMargins &indicatorMargins)
const;
172 QQmlEngine *qmlEngine =
nullptr;
173 QQStyleKitStyle *style =
nullptr;
174 QQStyleKitStyle *defaultStyle =
nullptr;
176 mutable QQStyleKitReader *sharedReader =
nullptr;
180 mutable QHash<
const QWidget *, QQStyleKitReader *> widgetReaders;
184 mutable QHash<MetricsCacheKey, ControlMetrics> metricsCache;
188 QSet<
const QWidget *> autoFillDisabledWidgets;