42 Q_DECLARE_PUBLIC(QStyleKitStyle)
66 const QWidget *widget =
nullptr;
76 return l
.model == r
.model && l.internalId == r.internalId
96 bool isValid()
const noexcept
97 {
return widget !=
nullptr && !std::holds_alternative<std::monostate>(id); }
98 friend bool operator==(
const SubElementKey &l,
const SubElementKey &r)
noexcept
99 {
return l.widget == r.widget && l.id == r.id; }
100 friend size_t qHash(
const SubElementKey &k, size_t seed = 0)
noexcept
102 if (
auto *c = std::get_if<ItemViewCell>(&k.id))
103 return qHashMulti(seed, k.widget, 1, c->model, c->internalId, c->row, c->column);
104 if (
auto *a = std::get_if<Action>(&k.id))
105 return qHashMulti(seed, k.widget, 2, a->action);
106 if (
auto *t = std::get_if<Tab>(&k.id))
107 return qHashMulti(seed, k.widget, 3, t->index);
108 return qHashMulti(seed, k.widget, 0);
113 struct MetricsCacheKey
115 QQStyleKitReader::ControlType type;
118 friend bool operator==(MetricsCacheKey lhs, MetricsCacheKey rhs)
noexcept
119 {
return lhs.type == rhs.type && lhs.state == rhs.state; }
120 friend size_t qHash(MetricsCacheKey key, size_t seed = 0)
noexcept
121 {
return qHashMulti(seed, key.type, key.state); }
128 struct QQStyleKitResolved
130 const QQStyleKitReader *reader =
nullptr;
131 const ControlMetrics *metrics =
nullptr;
132 const QWidget *widget =
nullptr;
134 bool isValid()
const {
return reader && metrics; }
136 const QQStyleKitDelegateProperties *background()
const;
144 struct QQStyleKitLayoutResolved
146 const ControlMetrics *metrics =
nullptr;
147 const QQStyleKitControlProperties *staticProps =
nullptr;
150 bool isValid()
const {
return metrics; }
152 const QQStyleKitDelegateProperties *background()
const;
155 QFont font()
const {
return staticFont; }
159 template <
typename T>
162 decltype(
std::declval<T>().resolveMask()) resolveMask;
165 T reverted(T current) && {
166 oldWidgetValue.setResolveMask(oldWidgetValue.resolveMask() & resolveMask);
167 current.setResolveMask(current.resolveMask() & ~resolveMask);
168 current.resolve(oldWidgetValue);
169 current.setResolveMask(current.resolveMask() | oldWidgetValue.resolveMask());
175 QStyleKitStylePrivate();
180 QQStyleKitStyle *ensureDefaultStyle();
181 QQStyleKitStyle *effectiveStyle()
const;
183 void unsetStyleFont(QWidget *widget);
184 void setStyleFont(QWidget *widget,
const QFont &styleFont);
185 void refreshStyleFont(QWidget *widget);
187 void unsetStylePalette(QWidget *widget);
188 void setStylePalette(QWidget *widget,
const QPalette &stylePalette)
const;
189 void refreshStylePalette(QWidget *widget);
191 QQStyleKitReader *readerForWidget(
const QWidget *widget)
const;
192 void cleanupWidgetReader(
const QWidget *widget)
const;
193 void onWidgetDestroyed(QObject *w)
const;
195 QQStyleKitReader *ensureSharedReader()
const;
196 QQStyleKitReader *ensureSubElementReader()
const;
198 static SubElementKey subElementKeyForOption(
const QStyleOption *opt,
const QWidget *widget);
199 QQStyleKitReader *startSubElementTransition(
const SubElementKey &key,
200 QQStyleKitReader::ControlType type,
201 QQSK::State fromState, QQSK::State toState,
202 QQuickTransition *transition)
const;
203 void cleanupSubElements(
const QWidget *widget)
const;
204 void clearAllSubElements()
const;
206 QQSK::State resolvedStateFor(QQStyleKitReader::ControlType type, QStyle::State state,
207 const QWidget *widget =
nullptr)
const;
209 QQStyleKitResolved resolve(
const QWidget *w, QQStyleKitReader::ControlType type, QStyle::State state)
const;
210 QQStyleKitResolved resolveSubElement(
const QWidget *w,
const QStyleOption *opt,
211 QQStyleKitReader::ControlType type, QStyle::State state,
212 bool track =
true)
const;
214 QQStyleKitLayoutResolved resolveLayout(QQStyleKitReader::ControlType type,
215 QStyle::State state)
const;
217 const ControlMetrics &metricsFor(QQStyleKitReader::ControlType type, QQSK::State state)
const;
218 void clearMetricsCache();
220 ControlMetrics metricsForReader(QQStyleKitReader *reader)
const;
222 void drawControlIndicator(
const QQStyleKitDelegateProperties *indicator,
const QRectF &rect, QPainter *p)
const;
224 const QRect &rect,
const QString &text, uint textFlags,
226 Qt::Alignment defaultAlignment = Qt::AlignHCenter | Qt::AlignVCenter)
const;
227 void drawStyledItemRect(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
228 void drawStyledItemContents(
const QQStyleKitDelegateProperties *,
const QRectF &rect, QPainter *p)
const;
229 void drawStyledItemImage(
const QQStyleKitImageProperties *image,
const QRectF &rect,
230 qreal opacity, QPainter *p)
const;
232 QRect getAlignedRectInContainer(
const QRect &container,
const QSize &indicatorSize,
233 uint alignment,
const QMargins &padding,
234 const QMargins &indicatorMargins)
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 QSet<
const QWidget *> bgFillDisabledWidgets;