42 Q_DECLARE_PUBLIC(QStyleKitStyle)
64 const QWidget *widget =
nullptr;
74 return l
.model == r
.model && l.internalId == r.internalId
94 bool isValid()
const noexcept
95 {
return widget !=
nullptr && !std::holds_alternative<std::monostate>(id); }
96 friend bool operator==(
const SubElementKey &l,
const SubElementKey &r)
noexcept
97 {
return l.widget == r.widget && l.id == r.id; }
98 friend size_t qHash(
const SubElementKey &k, size_t seed = 0)
noexcept
100 if (
auto *c = std::get_if<ItemViewCell>(&k.id))
101 return qHashMulti(seed, k.widget, 1, c->model, c->internalId, c->row, c->column);
102 if (
auto *a = std::get_if<Action>(&k.id))
103 return qHashMulti(seed, k.widget, 2, a->action);
104 if (
auto *t = std::get_if<Tab>(&k.id))
105 return qHashMulti(seed, k.widget, 3, t->index);
106 return qHashMulti(seed, k.widget, 0);
111 struct MetricsCacheKey
113 QQStyleKitReader::ControlType type;
116 friend bool operator==(MetricsCacheKey lhs, MetricsCacheKey rhs)
noexcept
117 {
return lhs.type == rhs.type && lhs.state == rhs.state; }
118 friend size_t qHash(MetricsCacheKey key, size_t seed = 0)
noexcept
119 {
return qHashMulti(seed, key.type, key.state); }
126 struct QQStyleKitResolved
128 const QQStyleKitReader *reader =
nullptr;
129 const ControlMetrics *metrics =
nullptr;
130 const QWidget *widget =
nullptr;
132 bool isValid()
const {
return reader && metrics; }
134 const QQStyleKitDelegateProperties *background()
const;
142 struct QQStyleKitLayoutResolved
144 const ControlMetrics *metrics =
nullptr;
145 const QQStyleKitControlProperties *staticProps =
nullptr;
148 bool isValid()
const {
return metrics; }
150 const QQStyleKitDelegateProperties *background()
const;
153 QFont font()
const {
return staticFont; }
157 template <
typename T>
160 decltype(
std::declval<T>().resolveMask()) resolveMask;
163 T reverted(T current) && {
164 oldWidgetValue.setResolveMask(oldWidgetValue.resolveMask() & resolveMask);
165 current.setResolveMask(current.resolveMask() & ~resolveMask);
166 current.resolve(oldWidgetValue);
167 current.setResolveMask(current.resolveMask() | oldWidgetValue.resolveMask());
173 QStyleKitStylePrivate();
178 QQStyleKitStyle *ensureDefaultStyle();
179 QQStyleKitStyle *effectiveStyle()
const;
181 void unsetStyleFont(QWidget *widget);
182 void setStyleFont(QWidget *widget,
const QFont &styleFont);
183 void refreshStyleFont(QWidget *widget);
185 void unsetStylePalette(QWidget *widget);
186 void setStylePalette(QWidget *widget,
const QPalette &stylePalette)
const;
187 void refreshStylePalette(QWidget *widget);
189 QQStyleKitReader *readerForWidget(
const QWidget *widget)
const;
190 void cleanupWidgetReader(
const QWidget *widget)
const;
191 void onWidgetDestroyed(QObject *w)
const;
193 QQStyleKitReader *ensureSharedReader()
const;
194 QQStyleKitReader *ensureSubElementReader()
const;
196 static SubElementKey subElementKeyForOption(
const QStyleOption *opt,
const QWidget *widget);
197 QQStyleKitReader *startSubElementTransition(
const SubElementKey &key,
198 QQStyleKitReader::ControlType type,
199 QQSK::State fromState, QQSK::State toState,
200 QQuickTransition *transition)
const;
201 void cleanupSubElements(
const QWidget *widget)
const;
202 void clearAllSubElements()
const;
204 QQSK::State resolvedStateFor(QQStyleKitReader::ControlType type, QStyle::State state,
205 const QWidget *widget =
nullptr)
const;
207 QQStyleKitResolved resolve(
const QWidget *w, QQStyleKitReader::ControlType type, QStyle::State state)
const;
208 QQStyleKitResolved resolveSubElement(
const QWidget *w,
const QStyleOption *opt,
209 QQStyleKitReader::ControlType type, QStyle::State state,
210 bool track =
true)
const;
212 QQStyleKitLayoutResolved resolveLayout(QQStyleKitReader::ControlType type,
213 QStyle::State state)
const;
215 const ControlMetrics &metricsFor(QQStyleKitReader::ControlType type, QQSK::State state)
const;
216 void clearMetricsCache();
218 ControlMetrics metricsForReader(QQStyleKitReader *reader)
const;
220 void drawControlIndicator(
const QQStyleKitDelegateProperties *indicator,
const QRectF &rect, QPainter *p)
const;
222 const QRect &rect,
const QString &text, uint textFlags,
224 Qt::Alignment defaultAlignment = Qt::AlignHCenter | Qt::AlignVCenter)
const;
225 void drawStyledItemRect(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
226 void drawStyledItemContents(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
227 void drawStyledItemImage(
const QQStyleKitImageProperties *image,
const QRectF &rect,
228 qreal opacity, QPainter *p)
const;
230 QRect getAlignedRectInContainer(
const QRect &container,
const QSize &indicatorSize,
231 uint alignment,
const QMargins &padding,
232 const QMargins &indicatorMargins)
const;
234 QQmlEngine *qmlEngine =
nullptr;
235 QQStyleKitStyle *style =
nullptr;
236 QQStyleKitStyle *defaultStyle =
nullptr;
238 mutable QQStyleKitReader *sharedReader =
nullptr;
242 mutable QHash<
const QWidget *, QQStyleKitReader *> widgetReaders;
244 mutable QQStyleKitReader *subElementReader =
nullptr;
246 mutable QHash<SubElementKey, QQSK::State> subElementStates;
248 mutable QHash<SubElementKey, QQStyleKitReader *> subElementAnimationReaders;
249 static constexpr int kMaxSubElementAnimationReaders = 64;
250 static constexpr int kMaxSubElementStates = 1024;
252 mutable QHash<MetricsCacheKey, ControlMetrics> metricsCache;
256 QSet<
const QWidget *> bgFillDisabledWidgets;