Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qquickstyleitemspinbox.cpp
Go to the documentation of this file.
1// Copyright (C) 2020 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
6#include <QtQuickTemplates2/private/qquickindicatorbutton_p.h>
7
9
10QFont QQuickStyleItemSpinBox::styleFont(QQuickItem *control) const
11{
12 return style()->font(QStyle::CE_ComboBoxLabel, controlSize(control));
13}
14
15void QQuickStyleItemSpinBox::connectToControl() const
16{
17 QQuickStyleItem::connectToControl();
18 auto spinbox = control<QQuickSpinBox>();
19 connect(spinbox->up(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty);
20 connect(spinbox->down(), &QQuickIndicatorButton::pressedChanged, this, &QQuickStyleItem::markImageDirty);
21}
22
23StyleItemGeometry QQuickStyleItemSpinBox::calculateGeometry()
24{
25 QStyleOptionSpinBox styleOption;
26 initStyleOption(styleOption);
27 StyleItemGeometry geometry;
28
29 geometry.minimumSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, QSize(0, 0));
30
31 if (styleOption.subControls == QStyle::SC_SpinBoxFrame) {
32 geometry.implicitSize = style()->sizeFromContents(QStyle::CT_SpinBox, &styleOption, contentSize());
33 styleOption.rect = QRect(QPoint(0, 0), geometry.implicitSize);
34 geometry.contentRect = style()->subControlRect(QStyle::CC_SpinBox, &styleOption, QStyle::SC_SpinBoxEditField);
35 geometry.layoutRect = style()->subElementRect(QStyle::SE_SpinBoxLayoutItem, &styleOption);
36 geometry.ninePatchMargins = style()->ninePatchMargins(QStyle::CC_SpinBox, &styleOption, geometry.minimumSize);
37 geometry.focusFrameRadius = style()->pixelMetric(QStyle::PM_SpinBoxFocusFrameRadius, &styleOption);
38 } else {
39 geometry.implicitSize = geometry.minimumSize;
40 }
41
42 return geometry;
43}
44
45void QQuickStyleItemSpinBox::paintEvent(QPainter *painter) const
46{
47 QStyleOptionSpinBox styleOption;
48 initStyleOption(styleOption);
49 style()->drawComplexControl(QStyle::CC_SpinBox, &styleOption, painter);
50}
51
52void QQuickStyleItemSpinBox::initStyleOption(QStyleOptionSpinBox &styleOption) const
53{
54 initStyleOptionBase(styleOption);
55 auto spinbox = control<QQuickSpinBox>();
56
57 switch (m_subControl) {
58 case Frame:
59 styleOption.subControls = QStyle::SC_SpinBoxFrame;
60 styleOption.frame = true;
61 break;
62 case Up:
63 styleOption.subControls = (QStyle::SC_SpinBoxUp | QStyle::SC_SpinBoxDown);
64 break;
65 case Down:
66 styleOption.subControls = QStyle::SC_SpinBoxDown;
67 break;
68 }
69
70 if (spinbox->up()->isPressed()) {
71 styleOption.activeSubControls = QStyle::SC_SpinBoxUp;
72 styleOption.state |= QStyle::State_Sunken;
73 } else if (spinbox->down()->isPressed()) {
74 styleOption.activeSubControls = QStyle::SC_SpinBoxDown;
75 styleOption.state |= QStyle::State_Sunken;
76 }
77
78 styleOption.buttonSymbols = QStyleOptionSpinBox::UpDownArrows;
79 styleOption.stepEnabled = QStyleOptionSpinBox::StepEnabled;
80}
81
82QT_END_NAMESPACE
83
84#include "moc_qquickstyleitemspinbox.cpp"