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 void unsetStyleMinimumSize(QWidget *widget);
190 void refreshStyleMinimumSize(QWidget *widget);
192 QQStyleKitReader *readerForWidget(
const QWidget *widget)
const;
193 void cleanupWidgetReader(
const QWidget *widget)
const;
194 void onWidgetDestroyed(QObject *w)
const;
196 QQStyleKitReader *ensureSharedReader()
const;
197 QQStyleKitReader *ensureSubElementReader()
const;
199 static SubElementKey subElementKeyForOption(
const QStyleOption *opt,
const QWidget *widget);
200 QQStyleKitReader *startSubElementTransition(
const SubElementKey &key,
201 QQStyleKitReader::ControlType type,
202 QQSK::State fromState, QQSK::State toState,
203 QQuickTransition *transition)
const;
204 void cleanupSubElements(
const QWidget *widget)
const;
205 void clearAllSubElements()
const;
207 QQSK::State resolvedStateFor(QQStyleKitReader::ControlType type, QStyle::State state,
208 const QWidget *widget =
nullptr)
const;
210 QQStyleKitResolved resolve(
const QWidget *w, QQStyleKitReader::ControlType type, QStyle::State state)
const;
211 QQStyleKitResolved resolveSubElement(
const QWidget *w,
const QStyleOption *opt,
212 QQStyleKitReader::ControlType type, QStyle::State state,
213 bool track =
true)
const;
215 QQStyleKitLayoutResolved resolveLayout(QQStyleKitReader::ControlType type,
216 QStyle::State state)
const;
218 const ControlMetrics &metricsFor(QQStyleKitReader::ControlType type, QQSK::State state)
const;
219 void clearMetricsCache();
221 ControlMetrics metricsForReader(QQStyleKitReader *reader)
const;
223 void drawControlIndicator(
const QQStyleKitDelegateProperties *indicator,
const QRectF &rect, QPainter *p)
const;
225 const QRect &rect,
const QString &text, uint textFlags,
227 Qt::Alignment defaultAlignment = Qt::AlignHCenter | Qt::AlignVCenter)
const;
228 void drawStyledItemRect(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
229 void drawStyledItemContents(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
230 void drawStyledItemImage(
const QQStyleKitImageProperties *image,
const QRectF &rect,
231 qreal opacity, QPainter *p)
const;
233 QRect getAlignedRectInContainer(
const QRect &container,
const QSize &indicatorSize,
234 uint alignment,
const QMargins &padding,
235 const QMargins &indicatorMargins)
const;
237 QQmlEngine *qmlEngine =
nullptr;
238 QQStyleKitStyle *style =
nullptr;
239 QQStyleKitStyle *defaultStyle =
nullptr;
241 mutable QQStyleKitReader *sharedReader =
nullptr;
245 mutable QHash<
const QWidget *, QQStyleKitReader *> widgetReaders;
247 mutable QQStyleKitReader *subElementReader =
nullptr;
249 mutable QHash<SubElementKey, QQSK::State> subElementStates;
251 mutable QHash<SubElementKey, QQStyleKitReader *> subElementAnimationReaders;
252 static constexpr int kMaxSubElementAnimationReaders = 64;
253 static constexpr int kMaxSubElementStates = 1024;
255 mutable QHash<MetricsCacheKey, ControlMetrics> metricsCache;
259 QHash<
const QWidget *, QSize> customMinimumSizeWidgets;
261 QSet<
const QWidget *> bgFillDisabledWidgets;