42 Q_DECLARE_PUBLIC(QStyleKitStyle)
53 QSize indicatorImplicitSize;
54 QMargins indicatorMargins;
55 QSize handleImplicitSize;
56 QMargins handleMargins;
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;
139 void drawBackground(
const QRectF &rect, QPainter *p)
const;
140 void drawIndicator(
const QRectF &rect, QPainter *p)
const;
141 void drawSubIndicator(
bool first,
const QRectF &rect, QPainter *p)
const;
142 void drawHandle(
const QRectF &rect, QPainter *p)
const;
143 void drawText(
const QRect &rect,
const QString &text, uint textFlags, QPainter *p,
144 Qt::Alignment defaultAlignment = Qt::AlignHCenter | Qt::AlignVCenter)
const;
149 struct QQStyleKitLayoutResolved
151 const ControlMetrics *metrics =
nullptr;
152 const QQStyleKitControlProperties *staticProps =
nullptr;
155 bool isValid()
const {
return metrics; }
157 const QQStyleKitDelegateProperties *background()
const;
160 QFont font()
const {
return staticFont; }
164 template <
typename T>
167 decltype(
std::declval<T>().resolveMask()) resolveMask;
170 T reverted(T current) && {
171 oldWidgetValue.setResolveMask(oldWidgetValue.resolveMask() & resolveMask);
172 current.setResolveMask(current.resolveMask() & ~resolveMask);
173 current.resolve(oldWidgetValue);
174 current.setResolveMask(current.resolveMask() | oldWidgetValue.resolveMask());
180 QStyleKitStylePrivate();
185 QQStyleKitStyle *ensureDefaultStyle();
186 QQStyleKitStyle *effectiveStyle()
const;
188 void unsetStyleFont(QWidget *widget);
189 void setStyleFont(QWidget *widget,
const QFont &styleFont);
190 void refreshStyleFont(QWidget *widget);
192 void unsetStylePalette(QWidget *widget);
193 void setStylePalette(QWidget *widget,
const QPalette &stylePalette)
const;
194 void refreshStylePalette(QWidget *widget);
196 void setStyleAutoFill(QWidget *widget);
197 void unsetStyleAutoFill(QWidget *widget);
199 void setStyleTranslucency(QWidget *widget);
200 void unsetStyleTranslucency(QWidget *widget);
202 void unsetStyleMinimumSize(QWidget *widget);
203 void refreshStyleMinimumSize(QWidget *widget);
205 QQStyleKitReader *readerForWidget(
const QWidget *widget)
const;
206 void cleanupWidgetReader(
const QWidget *widget)
const;
207 void onWidgetDestroyed(QObject *w)
const;
209 QQStyleKitReader *ensureSharedReader()
const;
210 QQStyleKitReader *ensureSubElementReader()
const;
212 static SubElementKey subElementKeyForOption(
const QStyleOption *opt,
const QWidget *widget);
213 QQStyleKitReader *startSubElementTransition(
const SubElementKey &key,
214 QQStyleKitReader::ControlType type,
215 QQSK::State fromState, QQSK::State toState,
216 QQuickTransition *transition)
const;
217 void cleanupSubElements(
const QWidget *widget)
const;
218 void clearAllSubElements()
const;
220 QQSK::State resolvedStateFor(QQStyleKitReader::ControlType type, QStyle::State state,
221 const QWidget *widget =
nullptr)
const;
223 QQStyleKitResolved resolve(
const QWidget *w, QQStyleKitReader::ControlType type, QStyle::State state)
const;
224 QQStyleKitResolved resolveSubElement(
const QWidget *w,
const QStyleOption *opt,
225 QQStyleKitReader::ControlType type, QStyle::State state,
226 bool track =
true)
const;
228 QQStyleKitLayoutResolved resolveLayout(QQStyleKitReader::ControlType type,
229 QStyle::State state)
const;
231 const ControlMetrics &metricsFor(QQStyleKitReader::ControlType type, QQSK::State state)
const;
232 void clearMetricsCache();
234 ControlMetrics metricsForReader(QQStyleKitReader *reader)
const;
236 QQmlEngine *qmlEngine =
nullptr;
237 QQStyleKitStyle *style =
nullptr;
238 QQStyleKitStyle *defaultStyle =
nullptr;
240 mutable QQStyleKitReader *sharedReader =
nullptr;
244 mutable QHash<
const QWidget *, QQStyleKitReader *> widgetReaders;
246 mutable QQStyleKitReader *subElementReader =
nullptr;
248 mutable QHash<SubElementKey, QQSK::State> subElementStates;
250 mutable QHash<SubElementKey, QQStyleKitReader *> subElementAnimationReaders;
251 static constexpr int kMaxSubElementAnimationReaders = 64;
252 static constexpr int kMaxSubElementStates = 1024;
254 mutable QHash<MetricsCacheKey, ControlMetrics> metricsCache;
258 QHash<
const QWidget *, QSize> customMinimumSizeWidgets;
259 QSet<
const QWidget *> autoFillDisabledWidgets;
260 QSet<
const QWidget *> translucentWidgets;