aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2022-11-18 15:15:16 +0800
committerMitch Curtis <mitch.curtis@qt.io>2022-12-01 10:26:20 +0800
commit4bd87b903b355b53e3105ba1ae7c154c4e55cdaf (patch)
treecc2edb597f0d5871302eb86e9dda78217384a5aa /src/quickcontrols
parent786e1748d4469c135a922a221024f3f9c421c0de (diff)
Remove "2" from Qt Quick Controls directories
Qt Quick Controls 2 was named that way because it was a follow-up to Qt Quick Controls 1.x. Now that Qt Quick Controls 1 is no longer supported, we don't need to have "2" in the name. Work on this was already started for the documentation in 1abdfe5d5a052f2298b7bf657513dfa7e0c66a56. By doing this renaming a few weeks before feature freeze, it won't affect the release but still results in as little time possible spent manually fixing conflicts in cherry-picks from non-LTS releases as a result of the renaming. This patch does the following: - Renames directories. - Adapts CMakeLists.txt and other files to account for the new paths. A follow-up patch will handle documentation. It does not touch library names or other user-facing stuff, as that will have to be done in Qt 7. Task-number: QTBUG-95413 Change-Id: I170d8db19033ee71e495ff0c5c1a517a41ed7634 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols')
-rw-r--r--src/quickcontrols/CMakeLists.txt98
-rw-r--r--src/quickcontrols/basic/AbstractButton.qml14
-rw-r--r--src/quickcontrols/basic/Action.qml7
-rw-r--r--src/quickcontrols/basic/ActionGroup.qml7
-rw-r--r--src/quickcontrols/basic/ApplicationWindow.qml12
-rw-r--r--src/quickcontrols/basic/BusyIndicator.qml29
-rw-r--r--src/quickcontrols/basic/Button.qml46
-rw-r--r--src/quickcontrols/basic/ButtonGroup.qml7
-rw-r--r--src/quickcontrols/basic/CMakeLists.txt213
-rw-r--r--src/quickcontrols/basic/Calendar.qml8
-rw-r--r--src/quickcontrols/basic/CalendarModel.qml6
-rw-r--r--src/quickcontrols/basic/CheckBox.qml59
-rw-r--r--src/quickcontrols/basic/CheckDelegate.qml76
-rw-r--r--src/quickcontrols/basic/ComboBox.qml106
-rw-r--r--src/quickcontrols/basic/Container.qml14
-rw-r--r--src/quickcontrols/basic/Control.qml14
-rw-r--r--src/quickcontrols/basic/DayOfWeekRow.qml40
-rw-r--r--src/quickcontrols/basic/DelayButton.qml71
-rw-r--r--src/quickcontrols/basic/Dial.qml46
-rw-r--r--src/quickcontrols/basic/Dialog.qml52
-rw-r--r--src/quickcontrols/basic/DialogButtonBox.qml40
-rw-r--r--src/quickcontrols/basic/Drawer.qml45
-rw-r--r--src/quickcontrols/basic/Frame.qml22
-rw-r--r--src/quickcontrols/basic/GroupBox.qml40
-rw-r--r--src/quickcontrols/basic/HorizontalHeaderView.qml34
-rw-r--r--src/quickcontrols/basic/ItemDelegate.qml43
-rw-r--r--src/quickcontrols/basic/Label.qml13
-rw-r--r--src/quickcontrols/basic/Menu.qml47
-rw-r--r--src/quickcontrols/basic/MenuBar.qml29
-rw-r--r--src/quickcontrols/basic/MenuBarItem.qml43
-rw-r--r--src/quickcontrols/basic/MenuItem.qml71
-rw-r--r--src/quickcontrols/basic/MenuSeparator.qml24
-rw-r--r--src/quickcontrols/basic/MonthGrid.qml42
-rw-r--r--src/quickcontrols/basic/Page.qml23
-rw-r--r--src/quickcontrols/basic/PageIndicator.qml41
-rw-r--r--src/quickcontrols/basic/Pane.qml21
-rw-r--r--src/quickcontrols/basic/Popup.qml30
-rw-r--r--src/quickcontrols/basic/ProgressBar.qml33
-rw-r--r--src/quickcontrols/basic/RadioButton.qml52
-rw-r--r--src/quickcontrols/basic/RadioDelegate.qml69
-rw-r--r--src/quickcontrols/basic/RangeSlider.qml62
-rw-r--r--src/quickcontrols/basic/RoundButton.qml47
-rw-r--r--src/quickcontrols/basic/ScrollBar.qml42
-rw-r--r--src/quickcontrols/basic/ScrollIndicator.qml42
-rw-r--r--src/quickcontrols/basic/ScrollView.qml31
-rw-r--r--src/quickcontrols/basic/SelectionRectangle.qml28
-rw-r--r--src/quickcontrols/basic/Slider.qml49
-rw-r--r--src/quickcontrols/basic/SpinBox.qml101
-rw-r--r--src/quickcontrols/basic/SplitView.qml21
-rw-r--r--src/quickcontrols/basic/StackView.qml33
-rw-r--r--src/quickcontrols/basic/SwipeDelegate.qml44
-rw-r--r--src/quickcontrols/basic/SwipeView.qml32
-rw-r--r--src/quickcontrols/basic/Switch.qml58
-rw-r--r--src/quickcontrols/basic/SwitchDelegate.qml75
-rw-r--r--src/quickcontrols/basic/TabBar.qml36
-rw-r--r--src/quickcontrols/basic/TabButton.qml39
-rw-r--r--src/quickcontrols/basic/TextArea.qml41
-rw-r--r--src/quickcontrols/basic/TextField.qml49
-rw-r--r--src/quickcontrols/basic/ToolBar.qml20
-rw-r--r--src/quickcontrols/basic/ToolButton.qml41
-rw-r--r--src/quickcontrols/basic/ToolSeparator.qml24
-rw-r--r--src/quickcontrols/basic/ToolTip.qml35
-rw-r--r--src/quickcontrols/basic/TreeViewDelegate.qml63
-rw-r--r--src/quickcontrols/basic/Tumbler.qml47
-rw-r--r--src/quickcontrols/basic/VerticalHeaderView.qml34
-rw-r--r--src/quickcontrols/basic/WeekNumberColumn.qml40
-rw-r--r--src/quickcontrols/basic/images/arrow-indicator.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/basic/images/arrow-indicator@2x.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/basic/images/arrow-indicator@3x.pngbin0 -> 285 bytes
-rw-r--r--src/quickcontrols/basic/images/arrow-indicator@4x.pngbin0 -> 352 bytes
-rw-r--r--src/quickcontrols/basic/images/check.pngbin0 -> 424 bytes
-rw-r--r--src/quickcontrols/basic/images/check@2x.pngbin0 -> 713 bytes
-rw-r--r--src/quickcontrols/basic/images/check@3x.pngbin0 -> 999 bytes
-rw-r--r--src/quickcontrols/basic/images/check@4x.pngbin0 -> 1188 bytes
-rw-r--r--src/quickcontrols/basic/images/dial-indicator.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/basic/images/dial-indicator@2x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/basic/images/dial-indicator@3x.pngbin0 -> 284 bytes
-rw-r--r--src/quickcontrols/basic/images/dial-indicator@4x.pngbin0 -> 307 bytes
-rw-r--r--src/quickcontrols/basic/images/double-arrow.pngbin0 -> 303 bytes
-rw-r--r--src/quickcontrols/basic/images/double-arrow@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/basic/images/double-arrow@3x.pngbin0 -> 673 bytes
-rw-r--r--src/quickcontrols/basic/images/double-arrow@4x.pngbin0 -> 827 bytes
-rw-r--r--src/quickcontrols/basic/images/drop-indicator.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/basic/images/drop-indicator@2x.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/basic/images/drop-indicator@3x.pngbin0 -> 297 bytes
-rw-r--r--src/quickcontrols/basic/images/drop-indicator@4x.pngbin0 -> 376 bytes
-rw-r--r--src/quickcontrols/basic/impl/CMakeLists.txt28
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp192
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h61
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicdial.cpp91
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicdial_p.h50
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicprogressbar.cpp249
-rw-r--r--src/quickcontrols/basic/impl/qquickbasicprogressbar_p.h59
-rw-r--r--src/quickcontrols/basic/qquickbasicstyle.cpp215
-rw-r--r--src/quickcontrols/basic/qquickbasicstyle_p.h119
-rw-r--r--src/quickcontrols/basic/qquickbasictheme.cpp58
-rw-r--r--src/quickcontrols/basic/qquickbasictheme_p.h32
-rw-r--r--src/quickcontrols/basic/qtquickcontrols2basicstyleplugin.cpp47
-rw-r--r--src/quickcontrols/configure.cmake71
-rw-r--r--src/quickcontrols/designer/AbstractButtonSection.qml89
-rw-r--r--src/quickcontrols/designer/BusyIndicatorSpecifics.qml41
-rw-r--r--src/quickcontrols/designer/ButtonSection.qml41
-rw-r--r--src/quickcontrols/designer/ButtonSpecifics.qml30
-rw-r--r--src/quickcontrols/designer/CMakeLists.txt64
-rw-r--r--src/quickcontrols/designer/CheckBoxSpecifics.qml31
-rw-r--r--src/quickcontrols/designer/CheckDelegateSpecifics.qml35
-rw-r--r--src/quickcontrols/designer/CheckSection.qml35
-rw-r--r--src/quickcontrols/designer/ComboBoxSpecifics.qml86
-rw-r--r--src/quickcontrols/designer/ContainerSection.qml26
-rw-r--r--src/quickcontrols/designer/ControlSection.qml81
-rw-r--r--src/quickcontrols/designer/ControlSpecifics.qml22
-rw-r--r--src/quickcontrols/designer/DelayButtonSpecifics.qml48
-rw-r--r--src/quickcontrols/designer/DialSpecifics.qml139
-rw-r--r--src/quickcontrols/designer/FrameSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/GroupBoxSpecifics.qml44
-rw-r--r--src/quickcontrols/designer/InsetSection.qml86
-rw-r--r--src/quickcontrols/designer/ItemDelegateSection.qml25
-rw-r--r--src/quickcontrols/designer/ItemDelegateSpecifics.qml30
-rw-r--r--src/quickcontrols/designer/LabelSpecifics.qml53
-rw-r--r--src/quickcontrols/designer/PaddingSection.qml68
-rw-r--r--src/quickcontrols/designer/PageIndicatorSpecifics.qml65
-rw-r--r--src/quickcontrols/designer/PageSpecifics.qml68
-rw-r--r--src/quickcontrols/designer/PaneSection.qml40
-rw-r--r--src/quickcontrols/designer/PaneSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/ProgressBarSpecifics.qml88
-rw-r--r--src/quickcontrols/designer/RadioButtonSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/RadioDelegateSpecifics.qml30
-rw-r--r--src/quickcontrols/designer/RangeSliderSpecifics.qml156
-rw-r--r--src/quickcontrols/designer/RoundButtonSpecifics.qml51
-rw-r--r--src/quickcontrols/designer/ScrollViewSpecifics.qml57
-rw-r--r--src/quickcontrols/designer/SliderSpecifics.qml147
-rw-r--r--src/quickcontrols/designer/SpinBoxSpecifics.qml109
-rw-r--r--src/quickcontrols/designer/StackViewSpecifics.qml22
-rw-r--r--src/quickcontrols/designer/SwipeDelegateSpecifics.qml30
-rw-r--r--src/quickcontrols/designer/SwipeViewSpecifics.qml58
-rw-r--r--src/quickcontrols/designer/SwitchDelegateSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/SwitchSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/TabBarSpecifics.qml74
-rw-r--r--src/quickcontrols/designer/TabButtonSpecifics.qml26
-rw-r--r--src/quickcontrols/designer/TextAreaSpecifics.qml71
-rw-r--r--src/quickcontrols/designer/TextFieldSpecifics.qml68
-rw-r--r--src/quickcontrols/designer/ToolBarSpecifics.qml46
-rw-r--r--src/quickcontrols/designer/ToolButtonSpecifics.qml30
-rw-r--r--src/quickcontrols/designer/ToolSeparatorSpecifics.qml38
-rw-r--r--src/quickcontrols/designer/TumblerSpecifics.qml69
-rw-r--r--src/quickcontrols/designer/images/busyindicator-icon.pngbin0 -> 320 bytes
-rw-r--r--src/quickcontrols/designer/images/busyindicator-icon16.pngbin0 -> 229 bytes
-rw-r--r--src/quickcontrols/designer/images/busyindicator-icon@2x.pngbin0 -> 643 bytes
-rw-r--r--src/quickcontrols/designer/images/button-icon.pngbin0 -> 162 bytes
-rw-r--r--src/quickcontrols/designer/images/button-icon16.pngbin0 -> 145 bytes
-rw-r--r--src/quickcontrols/designer/images/button-icon@2x.pngbin0 -> 259 bytes
-rw-r--r--src/quickcontrols/designer/images/checkbox-icon.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/designer/images/checkbox-icon16.pngbin0 -> 230 bytes
-rw-r--r--src/quickcontrols/designer/images/checkbox-icon@2x.pngbin0 -> 336 bytes
-rw-r--r--src/quickcontrols/designer/images/combobox-icon.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/designer/images/combobox-icon16.pngbin0 -> 155 bytes
-rw-r--r--src/quickcontrols/designer/images/combobox-icon@2x.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/designer/images/control-icon.pngbin0 -> 293 bytes
-rw-r--r--src/quickcontrols/designer/images/control-icon16.pngbin0 -> 229 bytes
-rw-r--r--src/quickcontrols/designer/images/control-icon@2x.pngbin0 -> 509 bytes
-rw-r--r--src/quickcontrols/designer/images/delaybutton-icon.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/designer/images/delaybutton-icon16.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/designer/images/delaybutton-icon@2x.pngbin0 -> 286 bytes
-rw-r--r--src/quickcontrols/designer/images/dial-icon.pngbin0 -> 267 bytes
-rw-r--r--src/quickcontrols/designer/images/dial-icon16.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/designer/images/dial-icon@2x.pngbin0 -> 505 bytes
-rw-r--r--src/quickcontrols/designer/images/frame-icon.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/designer/images/frame-icon16.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/designer/images/frame-icon@2x.pngbin0 -> 125 bytes
-rw-r--r--src/quickcontrols/designer/images/groupbox-icon.pngbin0 -> 133 bytes
-rw-r--r--src/quickcontrols/designer/images/groupbox-icon16.pngbin0 -> 125 bytes
-rw-r--r--src/quickcontrols/designer/images/groupbox-icon@2x.pngbin0 -> 136 bytes
-rw-r--r--src/quickcontrols/designer/images/itemdelegate-icon.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/designer/images/itemdelegate-icon16.pngbin0 -> 124 bytes
-rw-r--r--src/quickcontrols/designer/images/itemdelegate-icon@2x.pngbin0 -> 133 bytes
-rw-r--r--src/quickcontrols/designer/images/label-icon.pngbin0 -> 206 bytes
-rw-r--r--src/quickcontrols/designer/images/label-icon16.pngbin0 -> 182 bytes
-rw-r--r--src/quickcontrols/designer/images/label-icon@2x.pngbin0 -> 284 bytes
-rw-r--r--src/quickcontrols/designer/images/page-icon.pngbin0 -> 190 bytes
-rw-r--r--src/quickcontrols/designer/images/page-icon16.pngbin0 -> 148 bytes
-rw-r--r--src/quickcontrols/designer/images/page-icon@2x.pngbin0 -> 195 bytes
-rw-r--r--src/quickcontrols/designer/images/pageindicator-icon.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/designer/images/pageindicator-icon16.pngbin0 -> 158 bytes
-rw-r--r--src/quickcontrols/designer/images/pageindicator-icon@2x.pngbin0 -> 207 bytes
-rw-r--r--src/quickcontrols/designer/images/pane-icon.pngbin0 -> 93 bytes
-rw-r--r--src/quickcontrols/designer/images/pane-icon16.pngbin0 -> 92 bytes
-rw-r--r--src/quickcontrols/designer/images/pane-icon@2x.pngbin0 -> 96 bytes
-rw-r--r--src/quickcontrols/designer/images/progressbar-icon.pngbin0 -> 101 bytes
-rw-r--r--src/quickcontrols/designer/images/progressbar-icon16.pngbin0 -> 92 bytes
-rw-r--r--src/quickcontrols/designer/images/progressbar-icon@2x.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/designer/images/radiobutton-icon.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/designer/images/radiobutton-icon16.pngbin0 -> 218 bytes
-rw-r--r--src/quickcontrols/designer/images/radiobutton-icon@2x.pngbin0 -> 482 bytes
-rw-r--r--src/quickcontrols/designer/images/rangeslider-icon.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/designer/images/rangeslider-icon16.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/designer/images/rangeslider-icon@2x.pngbin0 -> 282 bytes
-rw-r--r--src/quickcontrols/designer/images/roundbutton-icon.pngbin0 -> 229 bytes
-rw-r--r--src/quickcontrols/designer/images/roundbutton-icon16.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/designer/images/roundbutton-icon@2x.pngbin0 -> 381 bytes
-rw-r--r--src/quickcontrols/designer/images/scrollview-icon.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/designer/images/scrollview-icon16.pngbin0 -> 116 bytes
-rw-r--r--src/quickcontrols/designer/images/scrollview-icon@2x.pngbin0 -> 145 bytes
-rw-r--r--src/quickcontrols/designer/images/slider-icon.pngbin0 -> 190 bytes
-rw-r--r--src/quickcontrols/designer/images/slider-icon16.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/designer/images/slider-icon@2x.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/designer/images/spinbox-icon.pngbin0 -> 144 bytes
-rw-r--r--src/quickcontrols/designer/images/spinbox-icon16.pngbin0 -> 151 bytes
-rw-r--r--src/quickcontrols/designer/images/spinbox-icon@2x.pngbin0 -> 178 bytes
-rw-r--r--src/quickcontrols/designer/images/stackview-icon.pngbin0 -> 162 bytes
-rw-r--r--src/quickcontrols/designer/images/stackview-icon16.pngbin0 -> 151 bytes
-rw-r--r--src/quickcontrols/designer/images/stackview-icon@2x.pngbin0 -> 167 bytes
-rw-r--r--src/quickcontrols/designer/images/swipeview-icon.pngbin0 -> 163 bytes
-rw-r--r--src/quickcontrols/designer/images/swipeview-icon16.pngbin0 -> 152 bytes
-rw-r--r--src/quickcontrols/designer/images/swipeview-icon@2x.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/designer/images/switch-icon.pngbin0 -> 205 bytes
-rw-r--r--src/quickcontrols/designer/images/switch-icon16.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/designer/images/switch-icon@2x.pngbin0 -> 314 bytes
-rw-r--r--src/quickcontrols/designer/images/textarea-icon.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/designer/images/textarea-icon16.pngbin0 -> 133 bytes
-rw-r--r--src/quickcontrols/designer/images/textarea-icon@2x.pngbin0 -> 163 bytes
-rw-r--r--src/quickcontrols/designer/images/textfield-icon.pngbin0 -> 154 bytes
-rw-r--r--src/quickcontrols/designer/images/textfield-icon16.pngbin0 -> 147 bytes
-rw-r--r--src/quickcontrols/designer/images/textfield-icon@2x.pngbin0 -> 172 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbar-icon.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbar-icon16.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbar-icon@2x.pngbin0 -> 140 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbutton-icon.pngbin0 -> 141 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbutton-icon16.pngbin0 -> 128 bytes
-rw-r--r--src/quickcontrols/designer/images/toolbutton-icon@2x.pngbin0 -> 158 bytes
-rw-r--r--src/quickcontrols/designer/images/toolseparator-icon.pngbin0 -> 111 bytes
-rw-r--r--src/quickcontrols/designer/images/toolseparator-icon16.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/designer/images/toolseparator-icon@2x.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/designer/images/tumbler-icon.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/designer/images/tumbler-icon16.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/designer/images/tumbler-icon@2x.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/designer/qtquickcontrols2.metainfo535
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-applicationwindow-wireframe.pngbin0 -> 6143 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-basic-thumbnail.pngbin0 -> 4352 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-basic.pngbin0 -> 10801 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-busyindicator-custom.pngbin0 -> 944 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.gifbin0 -> 17357 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.pngbin0 -> 900 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-custom.pngbin0 -> 1299 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-flat.gifbin0 -> 2388 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-highlighted.gifbin0 -> 1856 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-icononly.pngbin0 -> 434 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-textbesideicon.pngbin0 -> 1315 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-textonly.pngbin0 -> 1073 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button-textundericon.pngbin0 -> 1147 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-button.gifbin0 -> 4140 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-calendarmodel.pngbin0 -> 4576 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkbox-custom.pngbin0 -> 1792 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkbox-group.pngbin0 -> 2950 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkbox-tristate.gifbin0 -> 8784 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkbox.gifbin0 -> 6403 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-custom.pngbin0 -> 2179 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-tristate.gifbin0 -> 10487 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate.gifbin0 -> 15290 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-combobox-custom.pngbin0 -> 924 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-combobox-delegate.pngbin0 -> 989 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-combobox-popup.pngbin0 -> 989 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-combobox.gifbin0 -> 7873 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-control.pngbin0 -> 47718 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-control.svg936
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-customize-buttons.pngbin0 -> 2542 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow-layout.pngbin0 -> 5816 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow.pngbin0 -> 1996 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-delaybutton-custom.pngbin0 -> 5112 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-delaybutton.gifbin0 -> 12595 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-custom.pngbin0 -> 2847 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-handle.pngbin0 -> 4203 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-inputMode.svgzbin0 -> 2753 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-inputmode.pngbin0 -> 9151 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-no-wrap.gifbin0 -> 52372 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial-wrap.gifbin0 -> 70792 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dial.pngbin0 -> 2603 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox-attached.pngbin0 -> 1489 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox.pngbin0 -> 1459 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-drawer-expanded-wireframe.pngbin0 -> 2260 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-drawer-wireframe.pngbin0 -> 1534 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-drawer.gifbin0 -> 55780 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-frame-custom.pngbin0 -> 1930 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-frame.pngbin0 -> 2912 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-fusion-palettes.pngbin0 -> 11034 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-fusion-thumbnail.pngbin0 -> 6275 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-fusion-violet.pngbin0 -> 3059 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-fusion.pngbin0 -> 9302 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-groupbox-checkable.pngbin0 -> 5006 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-groupbox-custom.pngbin0 -> 3046 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-groupbox-label.pngbin0 -> 1662 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-groupbox.pngbin0 -> 4442 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-4x.pngbin0 -> 4917 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.pngbin0 -> 6237 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset.pngbin0 -> 1906 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.pngbin0 -> 20260 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.pngbin0 -> 16437 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-size.pngbin0 -> 6386 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch.svgzbin0 -> 7598 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization-dark.pngbin0 -> 3001 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization.svgzbin0 -> 2215 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine-thumbnail.pngbin0 -> 4043 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-imagine.pngbin0 -> 7918 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-ios-dark.pngbin0 -> 17749 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-ios-light.pngbin0 -> 18954 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate-custom.pngbin0 -> 1358 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.gifbin0 -> 16287 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.pngbin0 -> 5645 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-label-custom.pngbin0 -> 942 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-label.pngbin0 -> 925 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-macos-dark.pngbin0 -> 23979 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-macos-light.pngbin0 -> 22318 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-macos-thumbnail.pngbin0 -> 22504 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-accent.pngbin0 -> 1291 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-attributes.pngbin0 -> 7618 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-background.pngbin0 -> 1444 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-dark.pngbin0 -> 10934 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-elevation.pngbin0 -> 2566 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-foreground.pngbin0 -> 1377 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-light.pngbin0 -> 11182 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-purple.pngbin0 -> 3256 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-theme.pngbin0 -> 1451 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-thumbnail.pngbin0 -> 10480 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-variant-dense.pngbin0 -> 21059 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-material-variant-normal.pngbin0 -> 22897 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menu-custom.pngbin0 -> 7293 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menu.gifbin0 -> 4683 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menu.pngbin0 -> 3629 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menubar-custom.pngbin0 -> 2659 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menubar.pngbin0 -> 8870 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menuseparator-custom.pngbin0 -> 4644 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-menuseparator.pngbin0 -> 4672 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-monthgrid-layout.pngbin0 -> 6648 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-monthgrid.pngbin0 -> 2819 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-page-wireframe.pngbin0 -> 1795 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-custom.pngbin0 -> 248 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-delegate.pngbin0 -> 314 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-pageindicator.pngbin0 -> 248 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-pane-custom.pngbin0 -> 1674 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-pane.pngbin0 -> 2473 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-popup-custom.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-popup-settings.pngbin0 -> 10545 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-popup-transformorigin.pngbin0 -> 7256 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-popup.pngbin0 -> 62355 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-popup.svg712
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-progressbar-custom.pngbin0 -> 165 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-progressbar-indeterminate.gifbin0 -> 5882 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-progressbar.gifbin0 -> 2072 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-radiobutton-custom.pngbin0 -> 2207 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-radiobutton.gifbin0 -> 7993 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate-custom.pngbin0 -> 2501 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate.gifbin0 -> 16859 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-rangeslider-custom.pngbin0 -> 585 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-rangeslider.gifbin0 -> 24125 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-roundbutton.pngbin0 -> 662 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-custom.pngbin0 -> 148 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-non-attached.pngbin0 -> 4645 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-nosnap.gifbin0 -> 5271 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snapalways.gifbin0 -> 4707 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gifbin0 -> 5646 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollbar.gifbin0 -> 32067 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-custom.pngbin0 -> 102 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-non-attached.pngbin0 -> 4468 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator.gifbin0 -> 42352 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollview-custom.pngbin0 -> 4423 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollview-wireframe.pngbin0 -> 705 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-scrollview.pngbin0 -> 4424 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-selectionrectangle.pngbin0 -> 52957 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider-custom.pngbin0 -> 454 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider-handle.pngbin0 -> 439 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider-nosnap.gifbin0 -> 18138 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider-snapalways.gifbin0 -> 7201 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider-snaponrelease.gifbin0 -> 18377 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-slider.gifbin0 -> 13697 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox-custom.pngbin0 -> 1006 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox-double.pngbin0 -> 737 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox-down.pngbin0 -> 784 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox-textual.pngbin0 -> 1096 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox-up.pngbin0 -> 786 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-spinbox.pngbin0 -> 775 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-splitview-custom.pngbin0 -> 125 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-custom.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-pop.gifbin0 -> 23801 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-push.gifbin0 -> 42790 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-replace.gifbin0 -> 28882 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-unwind.gifbin0 -> 23744 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-visible.pngbin0 -> 512 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-stackview-wireframe.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-styles.pngbin0 -> 101053 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-behind.gifbin0 -> 248344 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-custom.pngbin0 -> 1818 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gifbin0 -> 132134 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate.gifbin0 -> 123494 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipeview-indicator.pngbin0 -> 301 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipeview-wireframe.pngbin0 -> 1482 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-swipeview.gifbin0 -> 35983 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switch-checked.pngbin0 -> 1723 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switch-custom.pngbin0 -> 1734 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switch.gifbin0 -> 3466 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switch.pngbin0 -> 2042 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate-custom.pngbin0 -> 2773 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate.gifbin0 -> 38688 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar-custom.pngbin0 -> 2644 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar-explicit.pngbin0 -> 2093 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar-flickable.pngbin0 -> 2527 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar-wireframe.pngbin0 -> 348 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar.gifbin0 -> 8590 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbar.pngbin0 -> 2897 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tabbutton.pngbin0 -> 2646 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textarea-custom.pngbin0 -> 1320 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textarea-scrollable.pngbin0 -> 1580 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textarea.pngbin0 -> 1968 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textfield-custom.pngbin0 -> 2083 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textfield-disabled.pngbin0 -> 1261 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textfield-focused.pngbin0 -> 1316 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textfield-normal.pngbin0 -> 1304 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-textfield.pngbin0 -> 1680 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolbar-custom.pngbin0 -> 1174 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolbar.pngbin0 -> 1008 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolbutton-custom.pngbin0 -> 1398 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolbutton.pngbin0 -> 1226 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolseparator-custom.pngbin0 -> 3586 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-toolseparator.pngbin0 -> 5381 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tooltip-delay.pngbin0 -> 1144 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tooltip-hover.pngbin0 -> 1110 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tooltip-pressandhold.pngbin0 -> 1110 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tooltip-slider.pngbin0 -> 1261 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tooltip.pngbin0 -> 5523 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-treeviewdelegate.pngbin0 -> 78468 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tumbler-custom.pngbin0 -> 1879 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tumbler-delegate.pngbin0 -> 929 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tumbler-wrap.gifbin0 -> 54328 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-tumbler.pngbin0 -> 1050 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-accent.pngbin0 -> 1058 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-attributes.pngbin0 -> 5298 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-background.pngbin0 -> 1161 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-button.pngbin0 -> 674 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-dark.pngbin0 -> 10373 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-foreground.pngbin0 -> 985 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-light.pngbin0 -> 10846 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-theme.pngbin0 -> 1205 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-thumbnail.pngbin0 -> 8606 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-universal-violet.pngbin0 -> 2894 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn-layout.pngbin0 -> 3860 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn.pngbin0 -> 1432 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-windows-thumbnail.pngbin0 -> 12394 bytes
-rw-r--r--src/quickcontrols/doc/images/qtquickcontrols2-windows.pngbin0 -> 17132 bytes
-rw-r--r--src/quickcontrols/doc/manifest-meta.qdocconf32
-rw-r--r--src/quickcontrols/doc/qtquickcontrols.qdocconf104
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-action.qml32
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-busyindicator-custom.qml68
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-button-custom.qml31
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-button-icononly.qml10
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-button-textbesideicon.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-button-textonly.qml10
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-calendarmodel.qml32
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-custom.qml41
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-group.qml34
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml50
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-accepted.qml21
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-custom.qml90
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-find.qml16
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-popup.qml13
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-textat.qml16
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-valuerole.qml34
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow-layout.qml23
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-delaybutton-custom.qml58
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dial-custom.qml43
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modal.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modeless.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dialog.qml20
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml18
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml14
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-frame-custom.qml19
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-frame.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-checkable.qml24
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-custom.qml33
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox.qml18
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-headerview-simple.qml72
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml35
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate.qml24
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-label-custom.qml12
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-label.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-accent.qml19
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-background.qml18
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-elevation.qml27
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-foreground.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-theme.qml20
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-material-variant.qml189
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menu-custom.qml109
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menu-instantiator.qml45
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menubar-custom.qml60
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menubar.qml43
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator-custom.qml45
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator.qml36
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-layout.qml37
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-localization.qml25
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid.qml13
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modal.qml31
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modeless.qml31
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-overview.cmake7
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-custom.qml31
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml34
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-pane-custom.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-pane.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-popup-custom.qml29
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-popup.qml22
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-progressbar-custom.qml32
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-radiobutton-custom.qml41
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml50
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-rangeslider-custom.qml52
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-roundbutton.qml12
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-active.qml22
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-custom.qml29
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml56
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-policy.qml14
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-active.qml22
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml21
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml60
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-custom.qml57
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-interactive.qml14
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-listview.qml39
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-policy.qml14
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview.qml36
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-selectionrectangle.qml48
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-slider-custom.qml40
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-custom.qml72
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-double.qml32
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-textual.qml32
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-custom.qml33
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-handle-containmentmask.qml40
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-custom.qml29
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-visible.qml52
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml48
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml13
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate.qml63
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-custom.qml15
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-indicator.qml39
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-switch-custom.qml40
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml49
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-custom.qml25
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-explicit.qml28
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-flickable.qml26
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar.qml40
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tabbutton.qml19
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-custom.qml18
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-scrollable.qml23
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-custom.qml19
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-disabled.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-focused.qml11
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-normal.qml10
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar-custom.qml35
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar.qml39
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-toolbutton-custom.qml31
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator-custom.qml45
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator.qml44
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-custom.qml24
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-hover.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml15
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-slider.qml29
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip.qml27
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-custom.qml57
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-listView.qml22
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-pathView.qml33
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml62
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-universal-accent.qml19
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-universal-background.qml20
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-universal-foreground.qml17
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-universal-theme.qml20
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn-layout.qml25
-rw-r--r--src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn.qml13
-rw-r--r--src/quickcontrols/doc/src/external-pages.qdoc12
-rw-r--r--src/quickcontrols/doc/src/includes/customize-button-background.qdocinc25
-rw-r--r--src/quickcontrols/doc/src/includes/customizing-native-styles.qdocinc14
-rw-r--r--src/quickcontrols/doc/src/includes/inputmethodhints.qdocinc38
-rw-r--r--src/quickcontrols/doc/src/includes/qquickcombobox.qdocinc6
-rw-r--r--src/quickcontrols/doc/src/includes/qquickcontrol-background.qdocinc13
-rw-r--r--src/quickcontrols/doc/src/includes/qquickcontrol-focusreason.qdocinc15
-rw-r--r--src/quickcontrols/doc/src/includes/qquickdial.qdocinc13
-rw-r--r--src/quickcontrols/doc/src/includes/qquickicon.qdocinc52
-rw-r--r--src/quickcontrols/doc/src/includes/qquickimaginestyle.qdocinc60
-rw-r--r--src/quickcontrols/doc/src/includes/qquickmaterialstyle.qdocinc79
-rw-r--r--src/quickcontrols/doc/src/includes/qquickoverlay-popup-parent.qdocinc20
-rw-r--r--src/quickcontrols/doc/src/includes/qquickpopup-padding.qdocinc10
-rw-r--r--src/quickcontrols/doc/src/includes/qquickstackview.qdocinc5
-rw-r--r--src/quickcontrols/doc/src/includes/qquickswipedelegate-interaction.qdocinc5
-rw-r--r--src/quickcontrols/doc/src/includes/qquickswitch.qdocinc28
-rw-r--r--src/quickcontrols/doc/src/includes/qquicktooltip.qdocinc6
-rw-r--r--src/quickcontrols/doc/src/includes/qquickuniversalstyle.qdocinc53
-rw-r--r--src/quickcontrols/doc/src/includes/zero-based-months.qdocinc18
-rw-r--r--src/quickcontrols/doc/src/qt6-changes.qdoc281
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-basic.qdoc31
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-buttons.qdoc167
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-configuration.qdoc180
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-containers.qdoc89
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-cppclasses.qdoc34
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-customize.qdoc1033
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-delegates.qdoc74
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-deployment.qdoc73
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-environment.qdoc54
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-examples.qdoc13
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-fileselectors.qdoc116
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-focus.qdoc24
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-fusion.qdoc69
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-gettingstarted.qdoc62
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-guidelines.qdoc22
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-icons.qdoc145
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-imagine.qdoc2511
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-index.qdoc173
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-indicators.qdoc59
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-input.qdoc99
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-ios.qdoc62
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-macos.qdoc49
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-material.qdoc380
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-menus.qdoc44
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-navigation.qdoc46
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-popups.qdoc75
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-qmltypes.qdoc106
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-separators.qdoc39
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-styles.qdoc204
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-universal.qdoc264
-rw-r--r--src/quickcontrols/doc/src/qtquickcontrols2-windows.qdoc47
-rw-r--r--src/quickcontrols/fusion/ApplicationWindow.qml14
-rw-r--r--src/quickcontrols/fusion/BusyIndicator.qml37
-rw-r--r--src/quickcontrols/fusion/Button.qml43
-rw-r--r--src/quickcontrols/fusion/CMakeLists.txt151
-rw-r--r--src/quickcontrols/fusion/CheckBox.qml38
-rw-r--r--src/quickcontrols/fusion/CheckDelegate.qml53
-rw-r--r--src/quickcontrols/fusion/ComboBox.qml140
-rw-r--r--src/quickcontrols/fusion/DelayButton.qml82
-rw-r--r--src/quickcontrols/fusion/Dial.qml40
-rw-r--r--src/quickcontrols/fusion/Dialog.qml66
-rw-r--r--src/quickcontrols/fusion/DialogButtonBox.qml41
-rw-r--r--src/quickcontrols/fusion/Drawer.qml55
-rw-r--r--src/quickcontrols/fusion/Frame.qml24
-rw-r--r--src/quickcontrols/fusion/GroupBox.qml43
-rw-r--r--src/quickcontrols/fusion/HorizontalHeaderView.qml44
-rw-r--r--src/quickcontrols/fusion/ItemDelegate.qml43
-rw-r--r--src/quickcontrols/fusion/Label.qml15
-rw-r--r--src/quickcontrols/fusion/Menu.qml61
-rw-r--r--src/quickcontrols/fusion/MenuBar.qml40
-rw-r--r--src/quickcontrols/fusion/MenuBarItem.qml44
-rw-r--r--src/quickcontrols/fusion/MenuItem.qml69
-rw-r--r--src/quickcontrols/fusion/MenuSeparator.qml26
-rw-r--r--src/quickcontrols/fusion/Page.qml25
-rw-r--r--src/quickcontrols/fusion/PageIndicator.qml43
-rw-r--r--src/quickcontrols/fusion/Pane.qml23
-rw-r--r--src/quickcontrols/fusion/Popup.qml33
-rw-r--r--src/quickcontrols/fusion/ProgressBar.qml83
-rw-r--r--src/quickcontrols/fusion/RadioButton.qml38
-rw-r--r--src/quickcontrols/fusion/RadioDelegate.qml53
-rw-r--r--src/quickcontrols/fusion/RangeSlider.qml48
-rw-r--r--src/quickcontrols/fusion/RoundButton.qml67
-rw-r--r--src/quickcontrols/fusion/ScrollBar.qml44
-rw-r--r--src/quickcontrols/fusion/ScrollIndicator.qml44
-rw-r--r--src/quickcontrols/fusion/ScrollView.qml31
-rw-r--r--src/quickcontrols/fusion/SelectionRectangle.qml30
-rw-r--r--src/quickcontrols/fusion/Slider.qml34
-rw-r--r--src/quickcontrols/fusion/SpinBox.qml148
-rw-r--r--src/quickcontrols/fusion/SplitView.qml22
-rw-r--r--src/quickcontrols/fusion/SwipeDelegate.qml45
-rw-r--r--src/quickcontrols/fusion/Switch.qml38
-rw-r--r--src/quickcontrols/fusion/SwitchDelegate.qml52
-rw-r--r--src/quickcontrols/fusion/TabBar.qml46
-rw-r--r--src/quickcontrols/fusion/TabButton.qml63
-rw-r--r--src/quickcontrols/fusion/TextArea.qml43
-rw-r--r--src/quickcontrols/fusion/TextField.qml69
-rw-r--r--src/quickcontrols/fusion/ToolBar.qml49
-rw-r--r--src/quickcontrols/fusion/ToolButton.qml43
-rw-r--r--src/quickcontrols/fusion/ToolSeparator.qml33
-rw-r--r--src/quickcontrols/fusion/ToolTip.qml46
-rw-r--r--src/quickcontrols/fusion/TreeViewDelegate.qml62
-rw-r--r--src/quickcontrols/fusion/Tumbler.qml46
-rw-r--r--src/quickcontrols/fusion/VerticalHeaderView.qml44
-rw-r--r--src/quickcontrols/fusion/images/arrow.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/fusion/images/arrow.svg75
-rw-r--r--src/quickcontrols/fusion/images/arrow@2x.pngbin0 -> 145 bytes
-rw-r--r--src/quickcontrols/fusion/images/arrow@3x.pngbin0 -> 165 bytes
-rw-r--r--src/quickcontrols/fusion/images/arrow@4x.pngbin0 -> 182 bytes
-rw-r--r--src/quickcontrols/fusion/images/checkmark.pngbin0 -> 181 bytes
-rw-r--r--src/quickcontrols/fusion/images/checkmark.svg72
-rw-r--r--src/quickcontrols/fusion/images/checkmark@2x.pngbin0 -> 316 bytes
-rw-r--r--src/quickcontrols/fusion/images/checkmark@3x.pngbin0 -> 420 bytes
-rw-r--r--src/quickcontrols/fusion/images/checkmark@4x.pngbin0 -> 482 bytes
-rw-r--r--src/quickcontrols/fusion/images/progressmask.pngbin0 -> 309 bytes
-rw-r--r--src/quickcontrols/fusion/images/progressmask.svg74
-rw-r--r--src/quickcontrols/fusion/images/progressmask@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/fusion/images/progressmask@3x.pngbin0 -> 558 bytes
-rw-r--r--src/quickcontrols/fusion/images/progressmask@4x.pngbin0 -> 652 bytes
-rw-r--r--src/quickcontrols/fusion/impl/ButtonPanel.qml46
-rw-r--r--src/quickcontrols/fusion/impl/CMakeLists.txt42
-rw-r--r--src/quickcontrols/fusion/impl/CheckIndicator.qml58
-rw-r--r--src/quickcontrols/fusion/impl/RadioIndicator.qml44
-rw-r--r--src/quickcontrols/fusion/impl/SliderGroove.qml60
-rw-r--r--src/quickcontrols/fusion/impl/SliderHandle.qml54
-rw-r--r--src/quickcontrols/fusion/impl/SwitchIndicator.qml106
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp80
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h52
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusiondial.cpp108
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusiondial_p.h44
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionknob.cpp57
-rw-r--r--src/quickcontrols/fusion/impl/qquickfusionknob_p.h37
-rw-r--r--src/quickcontrols/fusion/qquickfusionstyle.cpp122
-rw-r--r--src/quickcontrols/fusion/qquickfusionstyle_p.h59
-rw-r--r--src/quickcontrols/fusion/qquickfusiontheme.cpp18
-rw-r--r--src/quickcontrols/fusion/qquickfusiontheme_p.h32
-rw-r--r--src/quickcontrols/fusion/qtquickcontrols2fusionstyleplugin.cpp48
-rw-r--r--src/quickcontrols/imagine/ApplicationWindow.qml24
-rw-r--r--src/quickcontrols/imagine/BusyIndicator.qml55
-rw-r--r--src/quickcontrols/imagine/Button.qml65
-rw-r--r--src/quickcontrols/imagine/CMakeLists.txt148
-rw-r--r--src/quickcontrols/imagine/CheckBox.qml73
-rw-r--r--src/quickcontrols/imagine/CheckDelegate.qml84
-rw-r--r--src/quickcontrols/imagine/ComboBox.qml139
-rw-r--r--src/quickcontrols/imagine/DelayButton.qml104
-rw-r--r--src/quickcontrols/imagine/Dial.qml67
-rw-r--r--src/quickcontrols/imagine/Dialog.qml83
-rw-r--r--src/quickcontrols/imagine/DialogButtonBox.qml52
-rw-r--r--src/quickcontrols/imagine/Drawer.qml63
-rw-r--r--src/quickcontrols/imagine/Frame.qml36
-rw-r--r--src/quickcontrols/imagine/GroupBox.qml65
-rw-r--r--src/quickcontrols/imagine/HorizontalHeaderView.qml34
-rw-r--r--src/quickcontrols/imagine/ItemDelegate.qml60
-rw-r--r--src/quickcontrols/imagine/Label.qml30
-rw-r--r--src/quickcontrols/imagine/Menu.qml74
-rw-r--r--src/quickcontrols/imagine/MenuItem.qml104
-rw-r--r--src/quickcontrols/imagine/MenuSeparator.qml46
-rw-r--r--src/quickcontrols/imagine/Page.qml40
-rw-r--r--src/quickcontrols/imagine/PageIndicator.qml59
-rw-r--r--src/quickcontrols/imagine/Pane.qml36
-rw-r--r--src/quickcontrols/imagine/Popup.qml54
-rw-r--r--src/quickcontrols/imagine/ProgressBar.qml108
-rw-r--r--src/quickcontrols/imagine/RadioButton.qml71
-rw-r--r--src/quickcontrols/imagine/RadioDelegate.qml82
-rw-r--r--src/quickcontrols/imagine/RangeSlider.qml101
-rw-r--r--src/quickcontrols/imagine/RoundButton.qml64
-rw-r--r--src/quickcontrols/imagine/ScrollBar.qml86
-rw-r--r--src/quickcontrols/imagine/ScrollIndicator.qml78
-rw-r--r--src/quickcontrols/imagine/ScrollView.qml52
-rw-r--r--src/quickcontrols/imagine/SelectionRectangle.qml43
-rw-r--r--src/quickcontrols/imagine/Slider.qml87
-rw-r--r--src/quickcontrols/imagine/SpinBox.qml119
-rw-r--r--src/quickcontrols/imagine/SplitView.qml30
-rw-r--r--src/quickcontrols/imagine/StackView.qml58
-rw-r--r--src/quickcontrols/imagine/SwipeDelegate.qml62
-rw-r--r--src/quickcontrols/imagine/SwipeView.qml57
-rw-r--r--src/quickcontrols/imagine/Switch.qml101
-rw-r--r--src/quickcontrols/imagine/SwitchDelegate.qml113
-rw-r--r--src/quickcontrols/imagine/TabBar.qml54
-rw-r--r--src/quickcontrols/imagine/TabButton.qml58
-rw-r--r--src/quickcontrols/imagine/TextArea.qml63
-rw-r--r--src/quickcontrols/imagine/TextField.qml62
-rw-r--r--src/quickcontrols/imagine/ToolBar.qml38
-rw-r--r--src/quickcontrols/imagine/ToolButton.qml61
-rw-r--r--src/quickcontrols/imagine/ToolSeparator.qml50
-rw-r--r--src/quickcontrols/imagine/ToolTip.qml52
-rw-r--r--src/quickcontrols/imagine/Tumbler.qml63
-rw-r--r--src/quickcontrols/imagine/VerticalHeaderView.qml34
-rw-r--r--src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js24
-rw-r--r--src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json19
-rw-r--r--src/quickcontrols/imagine/design/imagine.sketchbin0 -> 164993 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-background.pngbin0 -> 67 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-background@2x.pngbin0 -> 75 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-background@3x.pngbin0 -> 77 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-background@4x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay-modal.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay-modal@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay-modal@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay-modal@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/applicationwindow-overlay@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/busyindicator-animation.webpbin0 -> 30116 bytes
-rw-r--r--src/quickcontrols/imagine/images/busyindicator-animation@2x.webpbin0 -> 56588 bytes
-rw-r--r--src/quickcontrols/imagine/images/busyindicator-animation@3x.webpbin0 -> 77816 bytes
-rw-r--r--src/quickcontrols/imagine/images/busyindicator-animation@4x.webpbin0 -> 103290 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-disabled.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-disabled@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-disabled@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-disabled@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-focused.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-focused@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-focused@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-focused@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-disabled.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-disabled@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-disabled@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-disabled@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-disabled.9.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-disabled@2x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-disabled@3x.9.pngbin0 -> 130 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-disabled@4x.9.pngbin0 -> 138 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted.9.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted@2x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted@3x.9.pngbin0 -> 130 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-highlighted@4x.9.pngbin0 -> 138 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat.9.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat@2x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat@3x.9.pngbin0 -> 130 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-flat@4x.9.pngbin0 -> 138 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-focused.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-focused@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-focused@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-focused@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-disabled.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-disabled@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-disabled@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-disabled@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-focused.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-focused@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-focused@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-focused@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-highlighted@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/button-background@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-focused.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@2x.pngbin0 -> 501 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@3x.pngbin0 -> 626 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@4x.pngbin0 -> 848 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked@2x.pngbin0 -> 499 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked@3x.pngbin0 -> 625 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-checked@4x.pngbin0 -> 830 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-disabled.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-disabled@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-disabled@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-disabled@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-focused.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-focused@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-focused@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-focused@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-hovered.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-hovered@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-hovered@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-hovered@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-pressed.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-pressed@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-pressed@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator-pressed@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkbox-indicator@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-disabled.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-disabled@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-disabled@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-disabled@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-focused.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-focused@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-focused@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-focused@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-highlighted.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-highlighted@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-highlighted@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-highlighted@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-hovered.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-hovered@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-hovered@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-hovered@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-pressed.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-pressed@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-pressed@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background-pressed@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-background@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@2x.pngbin0 -> 501 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@3x.pngbin0 -> 626 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@4x.pngbin0 -> 848 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked@2x.pngbin0 -> 499 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked@3x.pngbin0 -> 625 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-checked@4x.pngbin0 -> 830 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-disabled.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-focused.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-focused@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-focused@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-focused@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-hovered.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked.pngbin0 -> 131 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@2x.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@3x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@4x.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-pressed.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/checkdelegate-indicator@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-disabled.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-disabled@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-disabled@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-disabled@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-disabled.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-disabled@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-disabled@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-disabled@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-focused.9.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-focused@2x.9.pngbin0 -> 338 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-focused@3x.9.pngbin0 -> 549 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable-focused@4x.9.pngbin0 -> 798 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable.9.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable@2x.9.pngbin0 -> 338 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable@3x.9.pngbin0 -> 549 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-editable@4x.9.pngbin0 -> 798 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-focused.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-focused@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-focused@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-focused@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-hovered.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-hovered@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-hovered@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-hovered@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-open.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-open@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-open@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-open@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-pressed.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-pressed@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-pressed@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background-pressed@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background.9.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background@2x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background@3x.9.pngbin0 -> 387 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-background@4x.9.pngbin0 -> 596 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-disabled.pngbin0 -> 152 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-disabled@2x.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-disabled@3x.pngbin0 -> 211 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-disabled@4x.pngbin0 -> 201 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-disabled.pngbin0 -> 197 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@2x.pngbin0 -> 259 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@3x.pngbin0 -> 386 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@4x.pngbin0 -> 445 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled.pngbin0 -> 193 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.pngbin0 -> 263 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.pngbin0 -> 394 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.pngbin0 -> 450 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored.pngbin0 -> 199 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@2x.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@3x.pngbin0 -> 402 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@4x.pngbin0 -> 456 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable.pngbin0 -> 203 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable@2x.pngbin0 -> 266 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable@3x.pngbin0 -> 395 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator-editable@4x.pngbin0 -> 452 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator@2x.pngbin0 -> 165 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator@3x.pngbin0 -> 230 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-indicator@4x.pngbin0 -> 215 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-popup.9.pngbin0 -> 424 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-popup@2x.9.pngbin0 -> 796 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-popup@3x.9.pngbin0 -> 1212 bytes
-rw-r--r--src/quickcontrols/imagine/images/combobox-popup@4x.9.pngbin0 -> 1644 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-focused.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-focused@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-focused@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-focused@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled-checked.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-disabled@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-focused.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-focused@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-focused@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-focused@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-hovered.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-hovered@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-hovered@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-hovered@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-pressed.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-pressed@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-pressed@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background-pressed@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-background@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-mask.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-mask@2x.9.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-mask@3x.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-mask@4x.9.pngbin0 -> 441 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress-disabled.9.pngbin0 -> 128 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress-disabled@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress-disabled@3x.9.pngbin0 -> 154 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress-disabled@4x.9.pngbin0 -> 165 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress.9.pngbin0 -> 128 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress@3x.9.pngbin0 -> 154 bytes
-rw-r--r--src/quickcontrols/imagine/images/delaybutton-progress@4x.9.pngbin0 -> 165 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-disabled.pngbin0 -> 3098 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-disabled@2x.pngbin0 -> 5609 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-disabled@3x.pngbin0 -> 13029 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-disabled@4x.pngbin0 -> 18158 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-focused.pngbin0 -> 3098 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-focused@2x.pngbin0 -> 5609 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-focused@3x.pngbin0 -> 13382 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background-focused@4x.pngbin0 -> 18762 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background.pngbin0 -> 3098 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background@2x.pngbin0 -> 5609 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background@3x.pngbin0 -> 13268 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-background@4x.pngbin0 -> 18609 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-disabled.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-disabled@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-disabled@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-disabled@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-hovered.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-hovered@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-hovered@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-hovered@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-pressed.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-pressed@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-pressed@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused-pressed@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-focused@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-hovered.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-hovered@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-hovered@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-hovered@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-pressed.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-pressed@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-pressed@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle-pressed@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle@2x.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle@3x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/dial-handle@4x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-background.9.pngbin0 -> 426 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-background@2x.9.pngbin0 -> 792 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-background@3x.9.pngbin0 -> 1206 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-background@4x.9.pngbin0 -> 1625 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay-modal.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay-modal@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay-modal@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay-modal@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialog-overlay@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialogbuttonbox-background.9.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialogbuttonbox-background@2x.9.pngbin0 -> 118 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialogbuttonbox-background@3x.9.pngbin0 -> 119 bytes
-rw-r--r--src/quickcontrols/imagine/images/dialogbuttonbox-background@4x.9.pngbin0 -> 119 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-bottom.9.pngbin0 -> 224 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-bottom@2x.9.pngbin0 -> 334 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-bottom@3x.9.pngbin0 -> 443 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-bottom@4x.9.pngbin0 -> 531 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-left.9.pngbin0 -> 218 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-left@2x.9.pngbin0 -> 321 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-left@3x.9.pngbin0 -> 417 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-left@4x.9.pngbin0 -> 532 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-right.9.pngbin0 -> 229 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-right@2x.9.pngbin0 -> 333 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-right@3x.9.pngbin0 -> 433 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-right@4x.9.pngbin0 -> 549 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-top.9.pngbin0 -> 216 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-top@2x.9.pngbin0 -> 325 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-top@3x.9.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-background-top@4x.9.pngbin0 -> 533 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay-modal.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay-modal@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay-modal@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay-modal@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/drawer-overlay@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/frame-background.9.pngbin0 -> 190 bytes
-rw-r--r--src/quickcontrols/imagine/images/frame-background@2x.9.pngbin0 -> 281 bytes
-rw-r--r--src/quickcontrols/imagine/images/frame-background@3x.9.pngbin0 -> 379 bytes
-rw-r--r--src/quickcontrols/imagine/images/frame-background@4x.9.pngbin0 -> 477 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-background.9.pngbin0 -> 190 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-background@2x.9.pngbin0 -> 281 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-background@3x.9.pngbin0 -> 379 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-background@4x.9.pngbin0 -> 477 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-title.9.pngbin0 -> 112 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-title@2x.9.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-title@3x.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/groupbox-title@4x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-disabled.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-disabled@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-disabled@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-disabled@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-focused.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-focused@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-focused@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-focused@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-highlighted.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-highlighted@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-highlighted@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-highlighted@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-hovered.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-hovered@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-hovered@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-hovered@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-pressed.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-pressed@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-pressed@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background-pressed@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/itemdelegate-background@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/menu-background.9.pngbin0 -> 664 bytes
-rw-r--r--src/quickcontrols/imagine/images/menu-background@2x.9.pngbin0 -> 1324 bytes
-rw-r--r--src/quickcontrols/imagine/images/menu-background@3x.9.pngbin0 -> 2099 bytes
-rw-r--r--src/quickcontrols/imagine/images/menu-background@4x.9.pngbin0 -> 2958 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-disabled.pngbin0 -> 173 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-disabled@2x.pngbin0 -> 204 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-disabled@3x.pngbin0 -> 251 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-disabled@4x.pngbin0 -> 294 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled.pngbin0 -> 181 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@2x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@3x.pngbin0 -> 253 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@4x.pngbin0 -> 301 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored.pngbin0 -> 181 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored@2x.pngbin0 -> 212 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored@3x.pngbin0 -> 253 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow-mirrored@4x.pngbin0 -> 301 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow.pngbin0 -> 176 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow@2x.pngbin0 -> 204 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow@3x.pngbin0 -> 251 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-arrow@4x.pngbin0 -> 294 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background-highlighted.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background-highlighted@2x.9.pngbin0 -> 124 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background-highlighted@3x.9.pngbin0 -> 128 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background-highlighted@4x.9.pngbin0 -> 138 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background.9.pngbin0 -> 115 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background@2x.9.pngbin0 -> 118 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background@3x.9.pngbin0 -> 119 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-background@4x.9.pngbin0 -> 124 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-focused.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered.pngbin0 -> 271 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@2x.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@3x.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@4x.pngbin0 -> 815 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@2x.pngbin0 -> 501 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@3x.pngbin0 -> 626 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@4x.pngbin0 -> 848 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked.pngbin0 -> 275 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked@2x.pngbin0 -> 499 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked@3x.pngbin0 -> 625 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-checked@4x.pngbin0 -> 830 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-disabled.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-disabled@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-disabled@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-disabled@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-focused.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-focused@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-focused@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-focused@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-hovered.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-hovered@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-hovered@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-hovered@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-pressed.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-pressed@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-pressed@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator-pressed@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator.pngbin0 -> 121 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator@2x.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator@3x.pngbin0 -> 192 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuitem-indicator@4x.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuseparator-separator.9.pngbin0 -> 98 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuseparator-separator@2x.9.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuseparator-separator@3x.9.pngbin0 -> 113 bytes
-rw-r--r--src/quickcontrols/imagine/images/menuseparator-separator@4x.9.pngbin0 -> 115 bytes
-rw-r--r--src/quickcontrols/imagine/images/page-background.pngbin0 -> 67 bytes
-rw-r--r--src/quickcontrols/imagine/images/page-background@2x.pngbin0 -> 75 bytes
-rw-r--r--src/quickcontrols/imagine/images/page-background@3x.pngbin0 -> 77 bytes
-rw-r--r--src/quickcontrols/imagine/images/page-background@4x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-current.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-current@2x.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-current@3x.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-current@4x.pngbin0 -> 280 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@2x.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@3x.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@4x.pngbin0 -> 280 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled@2x.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled@3x.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-disabled@4x.pngbin0 -> 280 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-pressed.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-pressed@2x.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-pressed@3x.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate-pressed@4x.pngbin0 -> 280 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate@2x.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate@3x.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/imagine/images/pageindicator-delegate@4x.pngbin0 -> 280 bytes
-rw-r--r--src/quickcontrols/imagine/images/pane-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/pane-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/pane-background@3x.9.pngbin0 -> 130 bytes
-rw-r--r--src/quickcontrols/imagine/images/pane-background@4x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-background.9.pngbin0 -> 426 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-background@2x.9.pngbin0 -> 792 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-background@3x.9.pngbin0 -> 1206 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-background@4x.9.pngbin0 -> 1625 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay-modal.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay-modal@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay-modal@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay-modal@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay.pngbin0 -> 70 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay@2x.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay@3x.pngbin0 -> 78 bytes
-rw-r--r--src/quickcontrols/imagine/images/popup-overlay@4x.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-animation.webpbin0 -> 4760 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-animation@2x.webpbin0 -> 7932 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-animation@3x.webpbin0 -> 8154 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-animation@4x.webpbin0 -> 9646 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-background.9.pngbin0 -> 194 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-background@2x.9.pngbin0 -> 284 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-background@3x.9.pngbin0 -> 405 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-background@4x.9.pngbin0 -> 580 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-mask.9.pngbin0 -> 166 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-mask@2x.9.pngbin0 -> 223 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-mask@3x.9.pngbin0 -> 293 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-mask@4x.9.pngbin0 -> 344 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-progress.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-progress@2x.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-progress@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/progressbar-progress@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@3x.pngbin0 -> 643 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@3x.pngbin0 -> 643 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked.pngbin0 -> 264 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-checked@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-disabled.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-disabled@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-disabled@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-disabled@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-focused.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-focused@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-focused@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-focused@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-hovered.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-hovered@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-hovered@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-hovered@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-pressed.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-pressed@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-pressed@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator-pressed@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiobutton-indicator@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-disabled.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-disabled@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-disabled@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-disabled@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-focused.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-focused@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-focused@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-focused@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-highlighted.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-highlighted@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-highlighted@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-highlighted@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-hovered.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-hovered@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-hovered@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-hovered@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-pressed.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-pressed@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-pressed@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background-pressed@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-background@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@3x.pngbin0 -> 643 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@3x.pngbin0 -> 643 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked.pngbin0 -> 264 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked@2x.pngbin0 -> 442 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-checked@4x.pngbin0 -> 881 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-disabled.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-focused.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-focused@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-focused@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-focused@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-hovered.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-pressed.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator.pngbin0 -> 213 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator@2x.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator@3x.pngbin0 -> 490 bytes
-rw-r--r--src/quickcontrols/imagine/images/radiodelegate-indicator@4x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-horizontal.9.pngbin0 -> 167 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-horizontal@2x.9.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-horizontal@3x.9.pngbin0 -> 332 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-horizontal@4x.9.pngbin0 -> 444 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-vertical.9.pngbin0 -> 175 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-vertical@2x.9.pngbin0 -> 252 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-vertical@3x.9.pngbin0 -> 328 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-background-vertical@4x.9.pngbin0 -> 464 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-disabled.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-disabled@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-disabled@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-disabled@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@4x.pngbin0 -> 990 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@4x.pngbin0 -> 990 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-focused@4x.pngbin0 -> 998 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-hovered.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-hovered@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-hovered@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-hovered@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-pressed.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-pressed@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-pressed@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle-pressed@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle@2x.pngbin0 -> 487 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle@3x.pngbin0 -> 728 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-handle@4x.pngbin0 -> 976 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled.9.pngbin0 -> 144 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.pngbin0 -> 273 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal.9.pngbin0 -> 144 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal@2x.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal@3x.9.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-horizontal@4x.9.pngbin0 -> 273 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled.9.pngbin0 -> 143 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@2x.9.pngbin0 -> 188 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@3x.9.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@4x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical.9.pngbin0 -> 143 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical@2x.9.pngbin0 -> 188 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical@3x.9.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/imagine/images/rangeslider-progress-vertical@4x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-focused.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-focused@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-focused@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-focused@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-hovered.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-checked@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled-checked.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-disabled@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-focused.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-focused@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-focused@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-focused@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-highlighted@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-hovered.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-hovered@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-hovered@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-hovered@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-pressed.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-pressed@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-pressed@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background-pressed@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background@2x.pngbin0 -> 663 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background@3x.pngbin0 -> 922 bytes
-rw-r--r--src/quickcontrols/imagine/images/roundbutton-background@4x.pngbin0 -> 1290 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-disabled.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-disabled@2x.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-disabled@3x.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-disabled@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle-interactive@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle@2x.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle@3x.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollbar-handle@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollindicator-handle.pngbin0 -> 79 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollindicator-handle@2x.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollindicator-handle@3x.pngbin0 -> 81 bytes
-rw-r--r--src/quickcontrols/imagine/images/scrollindicator-handle@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-horizontal.9.pngbin0 -> 167 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-horizontal@2x.9.pngbin0 -> 243 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-horizontal@3x.9.pngbin0 -> 332 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-horizontal@4x.9.pngbin0 -> 444 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-vertical.9.pngbin0 -> 175 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-vertical@2x.9.pngbin0 -> 252 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-vertical@3x.9.pngbin0 -> 328 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-background-vertical@4x.9.pngbin0 -> 464 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-disabled.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-disabled@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-disabled@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-disabled@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-hovered.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-hovered@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-hovered@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-hovered@4x.pngbin0 -> 990 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-pressed.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-pressed@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-pressed@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused-pressed@4x.pngbin0 -> 990 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused@2x.pngbin0 -> 519 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused@3x.pngbin0 -> 765 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-focused@4x.pngbin0 -> 998 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-hovered.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-hovered@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-hovered@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-hovered@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-pressed.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-pressed@2x.pngbin0 -> 484 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-pressed@3x.pngbin0 -> 726 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle-pressed@4x.pngbin0 -> 965 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle.pngbin0 -> 255 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle@2x.pngbin0 -> 487 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle@3x.pngbin0 -> 728 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-handle@4x.pngbin0 -> 976 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal-disabled.9.pngbin0 -> 144 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@2x.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@3x.9.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@4x.9.pngbin0 -> 273 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal.9.pngbin0 -> 144 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal@2x.9.pngbin0 -> 185 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal@3x.9.pngbin0 -> 228 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-horizontal@4x.9.pngbin0 -> 273 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical-disabled.9.pngbin0 -> 143 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical-disabled@2x.9.pngbin0 -> 188 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical-disabled@3x.9.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical-disabled@4x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical.9.pngbin0 -> 143 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical@2x.9.pngbin0 -> 188 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical@3x.9.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/imagine/images/slider-progress-vertical@4x.9.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-disabled.9.pngbin0 -> 198 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-disabled@2x.9.pngbin0 -> 277 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-disabled@3x.9.pngbin0 -> 443 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-disabled@4x.9.pngbin0 -> 583 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-editable.9.pngbin0 -> 214 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-editable@2x.9.pngbin0 -> 337 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-editable@3x.9.pngbin0 -> 533 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-editable@4x.9.pngbin0 -> 784 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-focused.9.pngbin0 -> 214 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-focused@2x.9.pngbin0 -> 337 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-focused@3x.9.pngbin0 -> 533 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background-focused@4x.9.pngbin0 -> 784 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background.9.pngbin0 -> 214 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background@2x.9.pngbin0 -> 337 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background@3x.9.pngbin0 -> 539 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-background@4x.9.pngbin0 -> 767 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-disabled.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-editable@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-focused.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-focused@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-focused@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-focused@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-hovered.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@2x.9.pngbin0 -> 186 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@4x.9.pngbin0 -> 261 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-pressed.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down@2x.9.pngbin0 -> 184 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down@3x.9.pngbin0 -> 225 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-down@4x.9.pngbin0 -> 256 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-disabled.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-editable@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-focused.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-focused@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-focused@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-focused@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-hovered.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored.9.pngbin0 -> 157 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@2x.9.pngbin0 -> 189 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@3x.9.pngbin0 -> 232 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@4x.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-pressed.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up.9.pngbin0 -> 160 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up@2x.9.pngbin0 -> 191 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up@3x.9.pngbin0 -> 235 bytes
-rw-r--r--src/quickcontrols/imagine/images/spinbox-indicator-up@4x.9.pngbin0 -> 269 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-disabled.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-disabled@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-disabled@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-disabled@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-hovered.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-hovered@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-hovered@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-hovered@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-pressed.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-pressed@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-pressed@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle-pressed@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle.pngbin0 -> 80 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/splitview-handle@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-disabled.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-disabled@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-disabled@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-disabled@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-focused.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-focused@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-focused@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-focused@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-highlighted.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-highlighted@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-highlighted@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-highlighted@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-hovered.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-hovered@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-hovered@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-hovered@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-pressed.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-pressed@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-pressed@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background-pressed@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/swipedelegate-background@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-disabled.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-disabled@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-disabled@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-disabled@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-pressed.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-pressed@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-pressed@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle-pressed@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-handle@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-focused.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-focused@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-focused@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-focused@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-hovered.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-hovered@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-hovered@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-hovered@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-pressed.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-pressed@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked-pressed@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-checked@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-disabled.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-disabled@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-disabled@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-disabled@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-focused.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-focused@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-focused@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-focused@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-hovered.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-hovered@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-hovered@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-hovered@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-pressed.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-pressed@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator-pressed@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switch-indicator@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-disabled.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-disabled@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-disabled@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-disabled@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-focused.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-focused@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-focused@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-focused@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-hovered.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-hovered@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-hovered@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-hovered@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-pressed.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-pressed@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-pressed@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background-pressed@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background@2x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background@3x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-background@4x.9.pngbin0 -> 132 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-disabled.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-disabled@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-disabled@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-disabled@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-pressed.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-pressed@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-pressed@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle-pressed@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle@2x.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle@3x.pngbin0 -> 517 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-handle@4x.pngbin0 -> 699 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-checked@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-disabled.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-focused.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-focused@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-focused@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-focused@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-hovered.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-pressed.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator@2x.pngbin0 -> 423 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator@3x.pngbin0 -> 650 bytes
-rw-r--r--src/quickcontrols/imagine/images/switchdelegate-indicator@4x.pngbin0 -> 834 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbar-background.pngbin0 -> 74 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbar-background@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbar-background@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbar-background@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-checked.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-checked@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-checked@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-checked@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled-checked.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-disabled@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-hovered.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-hovered@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-hovered@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-hovered@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-pressed.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-pressed@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-pressed@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background-pressed@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background@2x.9.pngbin0 -> 137 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background@3x.9.pngbin0 -> 153 bytes
-rw-r--r--src/quickcontrols/imagine/images/tabbutton-background@4x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-disabled.9.pngbin0 -> 180 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-disabled@2x.9.pngbin0 -> 242 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-disabled@3x.9.pngbin0 -> 312 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-disabled@4x.9.pngbin0 -> 390 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-focused.9.pngbin0 -> 196 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-focused@2x.9.pngbin0 -> 285 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-focused@3x.9.pngbin0 -> 383 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background-focused@4x.9.pngbin0 -> 503 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background.9.pngbin0 -> 196 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background@2x.9.pngbin0 -> 285 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background@3x.9.pngbin0 -> 383 bytes
-rw-r--r--src/quickcontrols/imagine/images/textarea-background@4x.9.pngbin0 -> 503 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-disabled.9.pngbin0 -> 188 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-disabled@2x.9.pngbin0 -> 273 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-disabled@3x.9.pngbin0 -> 355 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-disabled@4x.9.pngbin0 -> 533 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-focused.9.pngbin0 -> 205 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-focused@2x.9.pngbin0 -> 314 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-focused@3x.9.pngbin0 -> 495 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background-focused@4x.9.pngbin0 -> 712 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background.9.pngbin0 -> 205 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background@2x.9.pngbin0 -> 314 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background@3x.9.pngbin0 -> 495 bytes
-rw-r--r--src/quickcontrols/imagine/images/textfield-background@4x.9.pngbin0 -> 712 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbar-background.pngbin0 -> 76 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbar-background@2x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbar-background@3x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbar-background@4x.pngbin0 -> 83 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-focused.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-focused@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-focused@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-focused@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-hovered.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-checked@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-disabled-checked.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-focused.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-focused@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-focused@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-focused@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-hovered.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-hovered@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-hovered@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-hovered@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-pressed.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-pressed@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-pressed@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background-pressed@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background@2x.9.pngbin0 -> 127 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background@3x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolbutton-background@4x.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-horizontal.9.pngbin0 -> 125 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-horizontal@2x.9.pngbin0 -> 135 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-horizontal@3x.9.pngbin0 -> 141 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-horizontal@4x.9.pngbin0 -> 151 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-vertical.9.pngbin0 -> 128 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-vertical@2x.9.pngbin0 -> 133 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-vertical@3x.9.pngbin0 -> 138 bytes
-rw-r--r--src/quickcontrols/imagine/images/toolseparator-separator-vertical@4x.9.pngbin0 -> 150 bytes
-rw-r--r--src/quickcontrols/imagine/images/tooltip-background.9.pngbin0 -> 195 bytes
-rw-r--r--src/quickcontrols/imagine/images/tooltip-background@2x.9.pngbin0 -> 264 bytes
-rw-r--r--src/quickcontrols/imagine/images/tooltip-background@3x.9.pngbin0 -> 346 bytes
-rw-r--r--src/quickcontrols/imagine/images/tooltip-background@4x.9.pngbin0 -> 415 bytes
-rw-r--r--src/quickcontrols/imagine/impl/CMakeLists.txt46
-rw-r--r--src/quickcontrols/imagine/impl/OpacityMask.qml35
-rw-r--r--src/quickcontrols/imagine/impl/shaders/+glslcore/OpacityMask.frag13
-rw-r--r--src/quickcontrols/imagine/impl/shaders/+qsb/OpacityMask.fragbin0 -> 1409 bytes
-rw-r--r--src/quickcontrols/imagine/impl/shaders/OpacityMask.frag7
-rw-r--r--src/quickcontrols/imagine/impl/shaders/OpacityMask_rhi.frag17
-rw-r--r--src/quickcontrols/imagine/impl/shaders/compile.bat4
-rw-r--r--src/quickcontrols/imagine/qquickimaginestyle.cpp137
-rw-r--r--src/quickcontrols/imagine/qquickimaginestyle_p.h62
-rw-r--r--src/quickcontrols/imagine/qquickimaginetheme.cpp33
-rw-r--r--src/quickcontrols/imagine/qquickimaginetheme_p.h32
-rw-r--r--src/quickcontrols/imagine/qtquickcontrols2imaginestyleplugin.cpp49
-rw-r--r--src/quickcontrols/ios/Button.qml48
-rw-r--r--src/quickcontrols/ios/CMakeLists.txt107
-rw-r--r--src/quickcontrols/ios/CheckBox.qml46
-rw-r--r--src/quickcontrols/ios/CheckDelegate.qml75
-rw-r--r--src/quickcontrols/ios/Dial.qml102
-rw-r--r--src/quickcontrols/ios/Drawer.qml61
-rw-r--r--src/quickcontrols/ios/Frame.qml24
-rw-r--r--src/quickcontrols/ios/GroupBox.qml41
-rw-r--r--src/quickcontrols/ios/ItemDelegate.qml56
-rw-r--r--src/quickcontrols/ios/Menu.qml71
-rw-r--r--src/quickcontrols/ios/MenuBar.qml35
-rw-r--r--src/quickcontrols/ios/MenuBarItem.qml41
-rw-r--r--src/quickcontrols/ios/MenuItem.qml104
-rw-r--r--src/quickcontrols/ios/MenuSeparator.qml26
-rw-r--r--src/quickcontrols/ios/PageIndicator.qml37
-rw-r--r--src/quickcontrols/ios/Popup.qml54
-rw-r--r--src/quickcontrols/ios/ProgressBar.qml66
-rw-r--r--src/quickcontrols/ios/RadioButton.qml45
-rw-r--r--src/quickcontrols/ios/RadioDelegate.qml75
-rw-r--r--src/quickcontrols/ios/RangeSlider.qml91
-rw-r--r--src/quickcontrols/ios/ScrollBar.qml49
-rw-r--r--src/quickcontrols/ios/ScrollIndicator.qml48
-rw-r--r--src/quickcontrols/ios/Slider.qml69
-rw-r--r--src/quickcontrols/ios/SpinBox.qml97
-rw-r--r--src/quickcontrols/ios/SplitView.qml25
-rw-r--r--src/quickcontrols/ios/StackView.qml34
-rw-r--r--src/quickcontrols/ios/SwipeDelegate.qml59
-rw-r--r--src/quickcontrols/ios/Switch.qml79
-rw-r--r--src/quickcontrols/ios/SwitchDelegate.qml102
-rw-r--r--src/quickcontrols/ios/TabBar.qml43
-rw-r--r--src/quickcontrols/ios/TabButton.qml42
-rw-r--r--src/quickcontrols/ios/TextArea.qml49
-rw-r--r--src/quickcontrols/ios/TextField.qml55
-rw-r--r--src/quickcontrols/ios/ToolBar.qml26
-rw-r--r--src/quickcontrols/ios/ToolButton.qml39
-rw-r--r--src/quickcontrols/ios/TreeViewDelegate.qml77
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-dark.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-dark@2x.pngbin0 -> 294 bytes
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-dark@3x.pngbin0 -> 372 bytes
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-light.pngbin0 -> 238 bytes
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-light@2x.pngbin0 -> 300 bytes
-rw-r--r--src/quickcontrols/ios/images/arrow-indicator-light@3x.pngbin0 -> 389 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-dark.pngbin0 -> 821 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.pngbin0 -> 1709 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.pngbin0 -> 2989 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-light.pngbin0 -> 428 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.pngbin0 -> 788 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.pngbin0 -> 1267 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.pngbin0 -> 697 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.pngbin0 -> 1585 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.pngbin0 -> 2480 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.pngbin0 -> 301 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.pngbin0 -> 475 bytes
-rw-r--r--src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.pngbin0 -> 720 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-dark.9.pngbin0 -> 109 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-dark.9@2x.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-dark.9@3x.pngbin0 -> 129 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-light.9.pngbin0 -> 109 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-light.9@2x.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-light.9@3x.pngbin0 -> 129 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-dark.9.pngbin0 -> 303 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.pngbin0 -> 590 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.pngbin0 -> 733 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-light.9.pngbin0 -> 304 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.pngbin0 -> 523 bytes
-rw-r--r--src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.pngbin0 -> 671 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-dark.9.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.pngbin0 -> 112 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.pngbin0 -> 124 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-light.9.pngbin0 -> 107 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.pngbin0 -> 107 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.pngbin0 -> 118 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.pngbin0 -> 105 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.pngbin0 -> 104 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.pngbin0 -> 115 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.pngbin0 -> 106 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.pngbin0 -> 104 bytes
-rw-r--r--src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.pngbin0 -> 116 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-dark.9.pngbin0 -> 350 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-dark@2x.9.pngbin0 -> 601 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-dark@3x.9.pngbin0 -> 723 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-light.9.pngbin0 -> 319 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-light@2x.9.pngbin0 -> 564 bytes
-rw-r--r--src/quickcontrols/ios/images/menu-background-light@3x.9.pngbin0 -> 697 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-dark.9.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-dark@2x.9.pngbin0 -> 117 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-dark@3x.9.pngbin0 -> 118 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-dark.9.pngbin0 -> 277 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.pngbin0 -> 377 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.pngbin0 -> 474 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-light.9.pngbin0 -> 265 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.pngbin0 -> 381 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.pngbin0 -> 465 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.pngbin0 -> 253 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.pngbin0 -> 366 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.pngbin0 -> 467 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.pngbin0 -> 253 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.pngbin0 -> 368 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.pngbin0 -> 452 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-light.9.pngbin0 -> 115 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-light@2x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-light@3x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.pngbin0 -> 113 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.pngbin0 -> 118 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.pngbin0 -> 119 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-light.9.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.pngbin0 -> 122 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.pngbin0 -> 322 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.pngbin0 -> 544 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.pngbin0 -> 645 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.pngbin0 -> 310 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.pngbin0 -> 525 bytes
-rw-r--r--src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.pngbin0 -> 648 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-dark.9.pngbin0 -> 105 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.pngbin0 -> 108 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-light.9.pngbin0 -> 106 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.pngbin0 -> 109 bytes
-rw-r--r--src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.pngbin0 -> 110 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-dark.pngbin0 -> 136 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.pngbin0 -> 207 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.pngbin0 -> 267 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-light.pngbin0 -> 179 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.pngbin0 -> 237 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.pngbin0 -> 278 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-dark.pngbin0 -> 163 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.pngbin0 -> 223 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.pngbin0 -> 279 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-light.pngbin0 -> 161 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-light@2x.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/ios/images/pageindicator-delegate-light@3x.pngbin0 -> 270 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-dark.9.pngbin0 -> 404 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-dark@2x.9.pngbin0 -> 624 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-dark@3x.9.pngbin0 -> 924 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-light.9.pngbin0 -> 421 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-light@2x.9.pngbin0 -> 656 bytes
-rw-r--r--src/quickcontrols/ios/images/popup-background-light@3x.9.pngbin0 -> 907 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.pngbin0 -> 825 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.pngbin0 -> 1719 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.pngbin0 -> 2984 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-light.pngbin0 -> 390 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.pngbin0 -> 595 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.pngbin0 -> 825 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-dark.pngbin0 -> 502 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.pngbin0 -> 1420 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.pngbin0 -> 2780 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-light.pngbin0 -> 456 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-light@2x.pngbin0 -> 900 bytes
-rw-r--r--src/quickcontrols/ios/images/radiobutton-indicator-light@3x.pngbin0 -> 1216 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-dark.pngbin0 -> 314 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.pngbin0 -> 488 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.pngbin0 -> 400 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-light.pngbin0 -> 300 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.pngbin0 -> 467 bytes
-rw-r--r--src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.pngbin0 -> 419 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.pngbin0 -> 206 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.pngbin0 -> 203 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.pngbin0 -> 120 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.pngbin0 -> 164 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.pngbin0 -> 206 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.pngbin0 -> 114 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.pngbin0 -> 169 bytes
-rw-r--r--src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.pngbin0 -> 203 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-dark.9.pngbin0 -> 145 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-dark@2x.9.pngbin0 -> 181 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-dark@3x.9.pngbin0 -> 227 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-light.9.pngbin0 -> 151 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-light@2x.9.pngbin0 -> 171 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-background-light@3x.9.pngbin0 -> 231 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-dark.9.pngbin0 -> 1786 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.pngbin0 -> 4530 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.pngbin0 -> 10676 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-light.9.pngbin0 -> 1777 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.pngbin0 -> 5896 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.pngbin0 -> 10707 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle.9.pngbin0 -> 1752 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle@2x.9.pngbin0 -> 4508 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-handle@3x.9.pngbin0 -> 10605 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-dark.9.pngbin0 -> 149 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-dark@2x.9.pngbin0 -> 171 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-dark@3x.9.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-light.9.pngbin0 -> 143 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-light@2x.9.pngbin0 -> 171 bytes
-rw-r--r--src/quickcontrols/ios/images/slider-progress-light@3x.9.pngbin0 -> 254 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-dark.9.pngbin0 -> 316 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-dark@2x.9.pngbin0 -> 439 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-dark@3x.9.pngbin0 -> 661 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-light.9.pngbin0 -> 318 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-light@2x.9.pngbin0 -> 443 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-background-light@3x.9.pngbin0 -> 653 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.pngbin0 -> 123 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.pngbin0 -> 181 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.pngbin0 -> 206 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-light.9.pngbin0 -> 140 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.pngbin0 -> 194 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.pngbin0 -> 220 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.pngbin0 -> 318 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.pngbin0 -> 468 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.pngbin0 -> 599 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.pngbin0 -> 339 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.pngbin0 -> 487 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.pngbin0 -> 610 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.pngbin0 -> 140 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.pngbin0 -> 208 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.pngbin0 -> 250 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-light.9.pngbin0 -> 156 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.pngbin0 -> 221 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.pngbin0 -> 286 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.pngbin0 -> 330 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.pngbin0 -> 501 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.pngbin0 -> 642 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.pngbin0 -> 356 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.pngbin0 -> 520 bytes
-rw-r--r--src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.pngbin0 -> 654 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-dark.9.pngbin0 -> 774 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.pngbin0 -> 1686 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.pngbin0 -> 2807 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-light.9.pngbin0 -> 786 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.pngbin0 -> 1720 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.pngbin0 -> 2863 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle.9.pngbin0 -> 738 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle@2x.9.pngbin0 -> 1640 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-handle@3x.9.pngbin0 -> 2726 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-dark.pngbin0 -> 340 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.pngbin0 -> 618 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.pngbin0 -> 796 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-light.pngbin0 -> 373 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-light@2x.pngbin0 -> 668 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-checked-light@3x.pngbin0 -> 879 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-dark.pngbin0 -> 319 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-dark@2x.pngbin0 -> 603 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-dark@3x.pngbin0 -> 797 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-light.pngbin0 -> 335 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-light@2x.pngbin0 -> 609 bytes
-rw-r--r--src/quickcontrols/ios/images/switch-indicator-light@3x.pngbin0 -> 828 bytes
-rw-r--r--src/quickcontrols/ios/impl/CMakeLists.txt27
-rw-r--r--src/quickcontrols/ios/impl/CursorDelegate.qml22
-rw-r--r--src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp79
-rw-r--r--src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h62
-rw-r--r--src/quickcontrols/ios/impl/qquickiosstyle.cpp20
-rw-r--r--src/quickcontrols/ios/impl/qquickiosstyle_p.h39
-rw-r--r--src/quickcontrols/ios/qquickiostheme.mm82
-rw-r--r--src/quickcontrols/ios/qquickiostheme_p.h32
-rw-r--r--src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp55
-rw-r--r--src/quickcontrols/macos/Button.qml12
-rw-r--r--src/quickcontrols/macos/CMakeLists.txt66
-rw-r--r--src/quickcontrols/macos/CheckBox.qml13
-rw-r--r--src/quickcontrols/macos/ComboBox.qml32
-rw-r--r--src/quickcontrols/macos/Dial.qml10
-rw-r--r--src/quickcontrols/macos/Dialog.qml70
-rw-r--r--src/quickcontrols/macos/DialogButtonBox.qml40
-rw-r--r--src/quickcontrols/macos/Frame.qml8
-rw-r--r--src/quickcontrols/macos/GroupBox.qml28
-rw-r--r--src/quickcontrols/macos/ProgressBar.qml10
-rw-r--r--src/quickcontrols/macos/RadioButton.qml12
-rw-r--r--src/quickcontrols/macos/ScrollBar.qml33
-rw-r--r--src/quickcontrols/macos/ScrollView.qml42
-rw-r--r--src/quickcontrols/macos/SelectionRectangle.qml29
-rw-r--r--src/quickcontrols/macos/Slider.qml36
-rw-r--r--src/quickcontrols/macos/SpinBox.qml66
-rw-r--r--src/quickcontrols/macos/TextArea.qml8
-rw-r--r--src/quickcontrols/macos/TextField.qml11
-rw-r--r--src/quickcontrols/macos/TreeViewDelegate.qml23
-rw-r--r--src/quickcontrols/macos/qtquickcontrols2macosstyleplugin.cpp43
-rw-r--r--src/quickcontrols/material/ApplicationWindow.qml13
-rw-r--r--src/quickcontrols/material/BusyIndicator.qml28
-rw-r--r--src/quickcontrols/material/Button.qml85
-rw-r--r--src/quickcontrols/material/CMakeLists.txt158
-rw-r--r--src/quickcontrols/material/CheckBox.qml50
-rw-r--r--src/quickcontrols/material/CheckDelegate.qml64
-rw-r--r--src/quickcontrols/material/ComboBox.qml145
-rw-r--r--src/quickcontrols/material/DelayButton.qml83
-rw-r--r--src/quickcontrols/material/Dial.qml52
-rw-r--r--src/quickcontrols/material/Dialog.qml79
-rw-r--r--src/quickcontrols/material/DialogButtonBox.qml46
-rw-r--r--src/quickcontrols/material/Drawer.qml58
-rw-r--r--src/quickcontrols/material/Frame.qml30
-rw-r--r--src/quickcontrols/material/GroupBox.qml48
-rw-r--r--src/quickcontrols/material/HorizontalHeaderView.qml35
-rw-r--r--src/quickcontrols/material/ItemDelegate.qml55
-rw-r--r--src/quickcontrols/material/LICENSE_ANGULARJS.txt19
-rw-r--r--src/quickcontrols/material/Label.qml13
-rw-r--r--src/quickcontrols/material/Menu.qml74
-rw-r--r--src/quickcontrols/material/MenuBar.qml31
-rw-r--r--src/quickcontrols/material/MenuBarItem.qml55
-rw-r--r--src/quickcontrols/material/MenuItem.qml78
-rw-r--r--src/quickcontrols/material/MenuSeparator.qml23
-rw-r--r--src/quickcontrols/material/Page.qml23
-rw-r--r--src/quickcontrols/material/PageIndicator.qml44
-rw-r--r--src/quickcontrols/material/Pane.qml28
-rw-r--r--src/quickcontrols/material/Popup.qml52
-rw-r--r--src/quickcontrols/material/ProgressBar.qml34
-rw-r--r--src/quickcontrols/material/RadioButton.qml50
-rw-r--r--src/quickcontrols/material/RadioDelegate.qml64
-rw-r--r--src/quickcontrols/material/RangeSlider.qml59
-rw-r--r--src/quickcontrols/material/RoundButton.qml81
-rw-r--r--src/quickcontrols/material/ScrollBar.qml56
-rw-r--r--src/quickcontrols/material/ScrollIndicator.qml42
-rw-r--r--src/quickcontrols/material/ScrollView.qml31
-rw-r--r--src/quickcontrols/material/SelectionRectangle.qml33
-rw-r--r--src/quickcontrols/material/Slider.qml48
-rw-r--r--src/quickcontrols/material/SpinBox.qml123
-rw-r--r--src/quickcontrols/material/SplitView.qml40
-rw-r--r--src/quickcontrols/material/StackView.qml46
-rw-r--r--src/quickcontrols/material/SwipeDelegate.qml65
-rw-r--r--src/quickcontrols/material/SwipeView.qml33
-rw-r--r--src/quickcontrols/material/Switch.qml46
-rw-r--r--src/quickcontrols/material/SwitchDelegate.qml64
-rw-r--r--src/quickcontrols/material/TabBar.qml56
-rw-r--r--src/quickcontrols/material/TabButton.qml45
-rw-r--r--src/quickcontrols/material/TextArea.qml50
-rw-r--r--src/quickcontrols/material/TextField.qml52
-rw-r--r--src/quickcontrols/material/ToolBar.qml33
-rw-r--r--src/quickcontrols/material/ToolButton.qml53
-rw-r--r--src/quickcontrols/material/ToolSeparator.qml24
-rw-r--r--src/quickcontrols/material/ToolTip.qml50
-rw-r--r--src/quickcontrols/material/TreeViewDelegate.qml62
-rw-r--r--src/quickcontrols/material/Tumbler.qml45
-rw-r--r--src/quickcontrols/material/VerticalHeaderView.qml35
-rw-r--r--src/quickcontrols/material/images/arrow-indicator.pngbin0 -> 126 bytes
-rw-r--r--src/quickcontrols/material/images/arrow-indicator.svg56
-rw-r--r--src/quickcontrols/material/images/arrow-indicator@2x.pngbin0 -> 152 bytes
-rw-r--r--src/quickcontrols/material/images/arrow-indicator@3x.pngbin0 -> 174 bytes
-rw-r--r--src/quickcontrols/material/images/arrow-indicator@4x.pngbin0 -> 172 bytes
-rw-r--r--src/quickcontrols/material/images/check.pngbin0 -> 631 bytes
-rw-r--r--src/quickcontrols/material/images/check@2x.pngbin0 -> 1273 bytes
-rw-r--r--src/quickcontrols/material/images/check@3x.pngbin0 -> 1829 bytes
-rw-r--r--src/quickcontrols/material/images/check@4x.pngbin0 -> 2241 bytes
-rw-r--r--src/quickcontrols/material/images/drop-indicator.pngbin0 -> 125 bytes
-rw-r--r--src/quickcontrols/material/images/drop-indicator.svg5
-rw-r--r--src/quickcontrols/material/images/drop-indicator@2x.pngbin0 -> 158 bytes
-rw-r--r--src/quickcontrols/material/images/drop-indicator@3x.pngbin0 -> 180 bytes
-rw-r--r--src/quickcontrols/material/images/drop-indicator@4x.pngbin0 -> 202 bytes
-rw-r--r--src/quickcontrols/material/impl/BoxShadow.qml39
-rw-r--r--src/quickcontrols/material/impl/CMakeLists.txt44
-rw-r--r--src/quickcontrols/material/impl/CheckIndicator.qml87
-rw-r--r--src/quickcontrols/material/impl/CursorDelegate.qml32
-rw-r--r--src/quickcontrols/material/impl/ElevationEffect.qml246
-rw-r--r--src/quickcontrols/material/impl/RadioIndicator.qml30
-rw-r--r--src/quickcontrols/material/impl/RectangularGlow.qml207
-rw-r--r--src/quickcontrols/material/impl/SliderHandle.qml43
-rw-r--r--src/quickcontrols/material/impl/SwitchIndicator.qml49
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp214
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h56
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialprogressbar.cpp214
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialprogressbar_p.h59
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialripple.cpp411
-rw-r--r--src/quickcontrols/material/impl/qquickmaterialripple_p.h88
-rw-r--r--src/quickcontrols/material/qquickmaterialstyle.cpp1363
-rw-r--r--src/quickcontrols/material/qquickmaterialstyle_p.h302
-rw-r--r--src/quickcontrols/material/qquickmaterialtheme.cpp80
-rw-r--r--src/quickcontrols/material/qquickmaterialtheme_p.h32
-rw-r--r--src/quickcontrols/material/qt_attribution.json13
-rw-r--r--src/quickcontrols/material/qtquickcontrols2materialstyleplugin.cpp49
-rw-r--r--src/quickcontrols/material/shaders/+glslcore/RectangularGlow.frag25
-rw-r--r--src/quickcontrols/material/shaders/+hlsl/RectangularGlow.frag21
-rw-r--r--src/quickcontrols/material/shaders/+qsb/RectangularGlow.fragbin0 -> 2007 bytes
-rw-r--r--src/quickcontrols/material/shaders/RectangularGlow.frag19
-rw-r--r--src/quickcontrols/material/shaders/RectangularGlow_rhi.frag28
-rw-r--r--src/quickcontrols/material/shaders/compile.bat4
-rw-r--r--src/quickcontrols/qquickattachedpropertypropagator.cpp380
-rw-r--r--src/quickcontrols/qquickattachedpropertypropagator.h37
-rw-r--r--src/quickcontrols/qquickstyle.cpp474
-rw-r--r--src/quickcontrols/qquickstyle.h23
-rw-r--r--src/quickcontrols/qquickstyle_p.h48
-rw-r--r--src/quickcontrols/qquickstyleplugin.cpp127
-rw-r--r--src/quickcontrols/qquickstyleplugin_p.h49
-rw-r--r--src/quickcontrols/qt_cmdline.cmake10
-rw-r--r--src/quickcontrols/qtquickcontrols2global.h16
-rw-r--r--src/quickcontrols/qtquickcontrols2plugin.cpp140
-rw-r--r--src/quickcontrols/universal/ApplicationWindow.qml21
-rw-r--r--src/quickcontrols/universal/BusyIndicator.qml27
-rw-r--r--src/quickcontrols/universal/Button.qml56
-rw-r--r--src/quickcontrols/universal/CMakeLists.txt156
-rw-r--r--src/quickcontrols/universal/CheckBox.qml41
-rw-r--r--src/quickcontrols/universal/CheckDelegate.qml63
-rw-r--r--src/quickcontrols/universal/ComboBox.qml124
-rw-r--r--src/quickcontrols/universal/DelayButton.qml61
-rw-r--r--src/quickcontrols/universal/Dial.qml53
-rw-r--r--src/quickcontrols/universal/Dialog.qml57
-rw-r--r--src/quickcontrols/universal/DialogButtonBox.qml43
-rw-r--r--src/quickcontrols/universal/Drawer.qml45
-rw-r--r--src/quickcontrols/universal/Frame.qml22
-rw-r--r--src/quickcontrols/universal/GroupBox.qml42
-rw-r--r--src/quickcontrols/universal/HorizontalHeaderView.qml36
-rw-r--r--src/quickcontrols/universal/ItemDelegate.qml53
-rw-r--r--src/quickcontrols/universal/Label.qml14
-rw-r--r--src/quickcontrols/universal/Menu.qml49
-rw-r--r--src/quickcontrols/universal/MenuBar.qml30
-rw-r--r--src/quickcontrols/universal/MenuBarItem.qml57
-rw-r--r--src/quickcontrols/universal/MenuItem.qml81
-rw-r--r--src/quickcontrols/universal/MenuSeparator.qml29
-rw-r--r--src/quickcontrols/universal/Page.qml23
-rw-r--r--src/quickcontrols/universal/PageIndicator.qml38
-rw-r--r--src/quickcontrols/universal/Pane.qml21
-rw-r--r--src/quickcontrols/universal/Popup.qml31
-rw-r--r--src/quickcontrols/universal/ProgressBar.qml35
-rw-r--r--src/quickcontrols/universal/README.md9
-rw-r--r--src/quickcontrols/universal/RadioButton.qml41
-rw-r--r--src/quickcontrols/universal/RadioDelegate.qml63
-rw-r--r--src/quickcontrols/universal/RangeSlider.qml76
-rw-r--r--src/quickcontrols/universal/RoundButton.qml57
-rw-r--r--src/quickcontrols/universal/ScrollBar.qml61
-rw-r--r--src/quickcontrols/universal/ScrollIndicator.qml45
-rw-r--r--src/quickcontrols/universal/ScrollView.qml31
-rw-r--r--src/quickcontrols/universal/SelectionRectangle.qml37
-rw-r--r--src/quickcontrols/universal/Slider.qml63
-rw-r--r--src/quickcontrols/universal/SpinBox.qml114
-rw-r--r--src/quickcontrols/universal/SplitView.qml22
-rw-r--r--src/quickcontrols/universal/StackView.qml43
-rw-r--r--src/quickcontrols/universal/SwipeDelegate.qml59
-rw-r--r--src/quickcontrols/universal/Switch.qml41
-rw-r--r--src/quickcontrols/universal/SwitchDelegate.qml63
-rw-r--r--src/quickcontrols/universal/TabBar.qml37
-rw-r--r--src/quickcontrols/universal/TabButton.qml36
-rw-r--r--src/quickcontrols/universal/TextArea.qml60
-rw-r--r--src/quickcontrols/universal/TextField.qml60
-rw-r--r--src/quickcontrols/universal/ToolBar.qml20
-rw-r--r--src/quickcontrols/universal/ToolButton.qml50
-rw-r--r--src/quickcontrols/universal/ToolSeparator.qml26
-rw-r--r--src/quickcontrols/universal/ToolTip.qml39
-rw-r--r--src/quickcontrols/universal/Tumbler.qml45
-rw-r--r--src/quickcontrols/universal/VerticalHeaderView.qml36
-rw-r--r--src/quickcontrols/universal/images/checkmark.pngbin0 -> 222 bytes
-rw-r--r--src/quickcontrols/universal/images/checkmark@2x.pngbin0 -> 346 bytes
-rw-r--r--src/quickcontrols/universal/images/checkmark@3x.pngbin0 -> 796 bytes
-rw-r--r--src/quickcontrols/universal/images/checkmark@4x.pngbin0 -> 613 bytes
-rw-r--r--src/quickcontrols/universal/images/downarrow.pngbin0 -> 175 bytes
-rw-r--r--src/quickcontrols/universal/images/downarrow@2x.pngbin0 -> 267 bytes
-rw-r--r--src/quickcontrols/universal/images/downarrow@3x.pngbin0 -> 329 bytes
-rw-r--r--src/quickcontrols/universal/images/downarrow@4x.pngbin0 -> 365 bytes
-rw-r--r--src/quickcontrols/universal/images/leftarrow.pngbin0 -> 158 bytes
-rw-r--r--src/quickcontrols/universal/images/leftarrow@2x.pngbin0 -> 222 bytes
-rw-r--r--src/quickcontrols/universal/images/leftarrow@3x.pngbin0 -> 283 bytes
-rw-r--r--src/quickcontrols/universal/images/leftarrow@4x.pngbin0 -> 315 bytes
-rw-r--r--src/quickcontrols/universal/images/rightarrow.pngbin0 -> 152 bytes
-rw-r--r--src/quickcontrols/universal/images/rightarrow@2x.pngbin0 -> 226 bytes
-rw-r--r--src/quickcontrols/universal/images/rightarrow@3x.pngbin0 -> 258 bytes
-rw-r--r--src/quickcontrols/universal/images/rightarrow@4x.pngbin0 -> 338 bytes
-rw-r--r--src/quickcontrols/universal/impl/CMakeLists.txt39
-rw-r--r--src/quickcontrols/universal/impl/CheckIndicator.qml48
-rw-r--r--src/quickcontrols/universal/impl/RadioIndicator.qml47
-rw-r--r--src/quickcontrols/universal/impl/SwitchIndicator.qml48
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalbusyindicator.cpp220
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalbusyindicator_p.h57
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalfocusrectangle.cpp53
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalfocusrectangle_p.h37
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalprogressbar.cpp307
-rw-r--r--src/quickcontrols/universal/impl/qquickuniversalprogressbar_p.h59
-rw-r--r--src/quickcontrols/universal/qquickuniversalstyle.cpp587
-rw-r--r--src/quickcontrols/universal/qquickuniversalstyle_p.h212
-rw-r--r--src/quickcontrols/universal/qquickuniversaltheme.cpp37
-rw-r--r--src/quickcontrols/universal/qquickuniversaltheme_p.h32
-rw-r--r--src/quickcontrols/universal/qtquickcontrols2universalstyleplugin.cpp48
-rw-r--r--src/quickcontrols/windows/Button.qml43
-rw-r--r--src/quickcontrols/windows/CMakeLists.txt56
-rw-r--r--src/quickcontrols/windows/CheckBox.qml74
-rw-r--r--src/quickcontrols/windows/ComboBox.qml94
-rw-r--r--src/quickcontrols/windows/Frame.qml8
-rw-r--r--src/quickcontrols/windows/GroupBox.qml8
-rw-r--r--src/quickcontrols/windows/ProgressBar.qml8
-rw-r--r--src/quickcontrols/windows/RadioButton.qml8
-rw-r--r--src/quickcontrols/windows/ScrollBar.qml95
-rw-r--r--src/quickcontrols/windows/ScrollView.qml34
-rw-r--r--src/quickcontrols/windows/SelectionRectangle.qml29
-rw-r--r--src/quickcontrols/windows/Slider.qml8
-rw-r--r--src/quickcontrols/windows/SpinBox.qml88
-rw-r--r--src/quickcontrols/windows/TextArea.qml8
-rw-r--r--src/quickcontrols/windows/TextField.qml8
-rw-r--r--src/quickcontrols/windows/qtquickcontrols2windowsstyleplugin.cpp42
2538 files changed, 43958 insertions, 0 deletions
diff --git a/src/quickcontrols/CMakeLists.txt b/src/quickcontrols/CMakeLists.txt
new file mode 100644
index 0000000000..24a2ca8ca2
--- /dev/null
+++ b/src/quickcontrols/CMakeLists.txt
@@ -0,0 +1,98 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## QuickControls2 Module:
+#####################################################################
+
+qt_internal_add_qml_module(QuickControls2
+ URI "QtQuick.Controls"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ DESIGNER_SUPPORTED
+ CLASS_NAME QtQuickControls2Plugin
+ PLUGIN_TARGET qtquickcontrols2plugin
+ IMPORTS
+ QtQuick.Controls.impl/auto
+ OPTIONAL_IMPORTS
+ QtQuick.Controls.Fusion/auto
+ QtQuick.Controls.Material/auto
+ QtQuick.Controls.Imagine/auto
+ QtQuick.Controls.Universal/auto
+ QtQuick.Controls.Windows/auto
+ QtQuick.Controls.macOS/auto
+ QtQuick.Controls.iOS/auto
+ DEFAULT_IMPORTS
+ QtQuick.Controls.Basic/auto
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickattachedpropertypropagator.cpp qquickattachedpropertypropagator.h
+ qquickstyle.cpp qquickstyle.h qquickstyle_p.h
+ qquickstyleplugin.cpp qquickstyleplugin_p.h
+ qtquickcontrols2global.h
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2
+ Qt::QuickTemplates2Private
+ PUBLIC_LIBRARIES
+ Qt::Core
+ Qt::Gui
+ Qt::Quick
+ GENERATE_CPP_EXPORTS
+)
+
+qt_internal_extend_target(qtquickcontrols2plugin
+ SOURCES
+ qtquickcontrols2plugin.cpp
+ LIBRARIES
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickControls2Private
+ Qt::QuickTemplates2Private
+)
+
+if(QT_FEATURE_quick_designer)
+ add_subdirectory(designer)
+endif()
+
+add_subdirectory(basic)
+add_subdirectory(fusion)
+add_subdirectory(imagine)
+add_subdirectory(material)
+add_subdirectory(universal)
+
+if(MACOS)
+ add_subdirectory(macos)
+ ### Remove
+ add_subdirectory(ios)
+endif()
+
+if(IOS)
+ add_subdirectory(ios)
+endif()
+
+if(WIN32)
+ add_subdirectory(windows)
+endif()
+
+qt_internal_add_docs(QuickControls2
+ doc/qtquickcontrols.qdocconf
+)
+
+# Make the doc files available to Creator's locator.
+file(GLOB doc_files
+ "${CMAKE_CURRENT_SOURCE_DIR}/doc/snippets/*.qml"
+ "${CMAKE_CURRENT_SOURCE_DIR}/doc/src/*.qdoc"
+ "${CMAKE_CURRENT_SOURCE_DIR}/doc/src/templates/*.qdoc"
+)
+target_sources(QuickControls2
+ PRIVATE
+ ${doc_files}
+ doc/qtquickcontrols.qdocconf
+)
diff --git a/src/quickcontrols/basic/AbstractButton.qml b/src/quickcontrols/basic/AbstractButton.qml
new file mode 100644
index 0000000000..82105f3f81
--- /dev/null
+++ b/src/quickcontrols/basic/AbstractButton.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+}
diff --git a/src/quickcontrols/basic/Action.qml b/src/quickcontrols/basic/Action.qml
new file mode 100644
index 0000000000..aa360f0aa7
--- /dev/null
+++ b/src/quickcontrols/basic/Action.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Action { }
diff --git a/src/quickcontrols/basic/ActionGroup.qml b/src/quickcontrols/basic/ActionGroup.qml
new file mode 100644
index 0000000000..8ab1495d32
--- /dev/null
+++ b/src/quickcontrols/basic/ActionGroup.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ActionGroup { }
diff --git a/src/quickcontrols/basic/ApplicationWindow.qml b/src/quickcontrols/basic/ApplicationWindow.qml
new file mode 100644
index 0000000000..d64a87c99d
--- /dev/null
+++ b/src/quickcontrols/basic/ApplicationWindow.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ApplicationWindow {
+ id: window
+
+ color: window.palette.window
+}
diff --git a/src/quickcontrols/basic/BusyIndicator.qml b/src/quickcontrols/basic/BusyIndicator.qml
new file mode 100644
index 0000000000..2276f5a002
--- /dev/null
+++ b/src/quickcontrols/basic/BusyIndicator.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Basic.impl
+import QtQuick.Templates as T
+
+T.BusyIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ contentItem: BusyIndicatorImpl {
+ implicitWidth: 48
+ implicitHeight: 48
+
+ pen: control.palette.dark
+ fill: control.palette.dark
+
+ running: control.running
+ opacity: control.running ? 1 : 0
+ Behavior on opacity { OpacityAnimator { duration: 250 } }
+ }
+}
diff --git a/src/quickcontrols/basic/Button.qml b/src/quickcontrols/basic/Button.qml
new file mode 100644
index 0000000000..cc02c2d7cd
--- /dev/null
+++ b/src/quickcontrols/basic/Button.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ horizontalPadding: padding + 2
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.checked || control.highlighted ? control.palette.brightText :
+ control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.checked || control.highlighted ? control.palette.brightText :
+ control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: !control.flat || control.down || control.checked || control.highlighted
+ color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button,
+ control.palette.mid, control.down ? 0.5 : 0.0)
+ border.color: control.palette.highlight
+ border.width: control.visualFocus ? 2 : 0
+ }
+}
diff --git a/src/quickcontrols/basic/ButtonGroup.qml b/src/quickcontrols/basic/ButtonGroup.qml
new file mode 100644
index 0000000000..9c615a0286
--- /dev/null
+++ b/src/quickcontrols/basic/ButtonGroup.qml
@@ -0,0 +1,7 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.ButtonGroup { }
diff --git a/src/quickcontrols/basic/CMakeLists.txt b/src/quickcontrols/basic/CMakeLists.txt
new file mode 100644
index 0000000000..e45b6d09c0
--- /dev/null
+++ b/src/quickcontrols/basic/CMakeLists.txt
@@ -0,0 +1,213 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2basicstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "AbstractButton.qml"
+ "Action.qml"
+ "ActionGroup.qml"
+ "ApplicationWindow.qml"
+ "BusyIndicator.qml"
+ "Button.qml"
+ "ButtonGroup.qml"
+ "CheckBox.qml"
+ "CheckDelegate.qml"
+ "ComboBox.qml"
+ "Container.qml"
+ "Control.qml"
+ "DelayButton.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+ "Drawer.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "HorizontalHeaderView.qml"
+ "ItemDelegate.qml"
+ "Label.qml"
+ "Menu.qml"
+ "MenuBar.qml"
+ "MenuBarItem.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+ "Page.qml"
+ "PageIndicator.qml"
+ "Pane.qml"
+ "Popup.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "RadioDelegate.qml"
+ "RangeSlider.qml"
+ "RoundButton.qml"
+ "ScrollBar.qml"
+ "ScrollIndicator.qml"
+ "ScrollView.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "SplitView.qml"
+ "StackView.qml"
+ "SwipeDelegate.qml"
+ "Switch.qml"
+ "SwitchDelegate.qml"
+ "SwipeView.qml"
+ "TabBar.qml"
+ "TabButton.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ToolBar.qml"
+ "ToolButton.qml"
+ "ToolSeparator.qml"
+ "ToolTip.qml"
+ "Tumbler.qml"
+ "VerticalHeaderView.qml"
+)
+if (QT_FEATURE_quicktemplates2_calendar)
+ list(APPEND qml_files
+ "Calendar.qml"
+ "CalendarModel.qml"
+ "DayOfWeekRow.qml"
+ "MonthGrid.qml"
+ "WeekNumberColumn.qml"
+ )
+endif()
+if (QT_FEATURE_quick_treeview)
+ list(APPEND qml_files
+ "TreeViewDelegate.qml"
+ )
+endif()
+
+set_source_files_properties(Action.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(ActionGroup.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+if (QT_FEATURE_quicktemplates2_calendar)
+ set_source_files_properties(Calendar.qml PROPERTIES
+ QT_QML_SINGLETON_TYPE TRUE
+ QT_QML_SOURCE_VERSIONS "6.3"
+ )
+ set_source_files_properties(CalendarModel.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "6.3"
+ )
+ set_source_files_properties(DayOfWeekRow.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "6.3"
+ )
+endif()
+set_source_files_properties(DelayButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(Dialog.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(DialogButtonBox.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(HorizontalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+set_source_files_properties(MenuBar.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuBarItem.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+if (QT_FEATURE_quicktemplates2_calendar)
+ set_source_files_properties(MonthGrid.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "6.3"
+ )
+endif()
+set_source_files_properties(RoundButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(ScrollView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(SelectionRectangle.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "6.2"
+)
+set_source_files_properties(SplitView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.13;6.0"
+)
+set_source_files_properties(ToolSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(VerticalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+if (QT_FEATURE_quicktemplates2_calendar)
+ set_source_files_properties(WeekNumberColumn.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "6.3"
+ )
+endif()
+
+qt_internal_add_qml_module(qtquickcontrols2basicstyleplugin
+ URI "QtQuick.Controls.Basic"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2BasicStylePlugin
+ DEPENDENCIES
+ QtQuick/auto
+ PLUGIN_TARGET qtquickcontrols2basicstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickbasicstyle.cpp qquickbasicstyle_p.h
+ qquickbasictheme.cpp qquickbasictheme_p.h
+ qtquickcontrols2basicstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+# Resources:
+set(qtquickcontrols2basicstyleplugin_resource_files
+ "images/arrow-indicator.png"
+ "images/arrow-indicator@2x.png"
+ "images/arrow-indicator@3x.png"
+ "images/arrow-indicator@4x.png"
+ "images/check.png"
+ "images/check@2x.png"
+ "images/check@3x.png"
+ "images/check@4x.png"
+ "images/dial-indicator.png"
+ "images/dial-indicator@2x.png"
+ "images/dial-indicator@3x.png"
+ "images/dial-indicator@4x.png"
+ "images/double-arrow.png"
+ "images/double-arrow@2x.png"
+ "images/double-arrow@3x.png"
+ "images/double-arrow@4x.png"
+ "images/drop-indicator.png"
+ "images/drop-indicator@2x.png"
+ "images/drop-indicator@3x.png"
+ "images/drop-indicator@4x.png"
+)
+
+qt_internal_add_resource(qtquickcontrols2basicstyleplugin "qtquickcontrols2basicstyleplugin"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/Basic"
+ FILES
+ ${qtquickcontrols2basicstyleplugin_resource_files}
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2basicstyleplugin
+ qtquickcontrols2basicstyleimplplugin)
diff --git a/src/quickcontrols/basic/Calendar.qml b/src/quickcontrols/basic/Calendar.qml
new file mode 100644
index 0000000000..66d03afc09
--- /dev/null
+++ b/src/quickcontrols/basic/Calendar.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+pragma Singleton
+
+import QtQuick.Templates as T
+
+T.Calendar {}
diff --git a/src/quickcontrols/basic/CalendarModel.qml b/src/quickcontrols/basic/CalendarModel.qml
new file mode 100644
index 0000000000..0f18f62aee
--- /dev/null
+++ b/src/quickcontrols/basic/CalendarModel.qml
@@ -0,0 +1,6 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick.Templates as T
+
+T.CalendarModel {}
diff --git a/src/quickcontrols/basic/CheckBox.qml b/src/quickcontrols/basic/CheckBox.qml
new file mode 100644
index 0000000000..3d71008b50
--- /dev/null
+++ b/src/quickcontrols/basic/CheckBox.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ // keep in sync with CheckDelegate.qml (shared CheckIndicator.qml was removed for performance reasons)
+ indicator: Rectangle {
+ implicitWidth: 28
+ implicitHeight: 28
+
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ color: control.down ? control.palette.light : control.palette.base
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ defaultColor: "#353637"
+ color: control.palette.text
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+ visible: control.checkState === Qt.Checked
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 16
+ height: 3
+ color: control.palette.text
+ visible: control.checkState === Qt.PartiallyChecked
+ }
+ }
+
+ contentItem: CheckLabel {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+}
diff --git a/src/quickcontrols/basic/CheckDelegate.qml b/src/quickcontrols/basic/CheckDelegate.qml
new file mode 100644
index 0000000000..59e1543265
--- /dev/null
+++ b/src/quickcontrols/basic/CheckDelegate.qml
@@ -0,0 +1,76 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.CheckDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 12
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ // keep in sync with CheckBox.qml (shared CheckIndicator.qml was removed for performance reasons)
+ indicator: Rectangle {
+ implicitWidth: 28
+ implicitHeight: 28
+
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ color: control.down ? control.palette.light : control.palette.base
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ defaultColor: "#353637"
+ color: control.palette.text
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+ visible: control.checkState === Qt.Checked
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 16
+ height: 3
+ color: control.palette.text
+ visible: control.checkState === Qt.PartiallyChecked
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? control.palette.midlight : control.palette.light
+ }
+}
diff --git a/src/quickcontrols/basic/ComboBox.qml b/src/quickcontrols/basic/ComboBox.qml
new file mode 100644
index 0000000000..8cd148e9fe
--- /dev/null
+++ b/src/quickcontrols/basic/ComboBox.qml
@@ -0,0 +1,106 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ComboBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+ rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ palette.text: control.palette.text
+ palette.highlightedText: control.palette.highlightedText
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ color: control.palette.dark
+ defaultColor: "#353637"
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/double-arrow.png"
+ opacity: enabled ? 1 : 0.3
+ }
+
+ contentItem: T.TextField {
+ leftPadding: !control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
+ rightPadding: control.mirrored ? 12 : control.editable && activeFocus ? 3 : 1
+ topPadding: 6 - control.padding
+ bottomPadding: 6 - control.padding
+
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+
+ background: Rectangle {
+ visible: control.enabled && control.editable && !control.flat
+ border.width: parent && parent.activeFocus ? 2 : 1
+ border.color: parent && parent.activeFocus ? control.palette.highlight : control.palette.button
+ color: control.palette.base
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ implicitHeight: 40
+
+ color: control.down ? control.palette.mid : control.palette.button
+ border.color: control.palette.highlight
+ border.width: !control.editable && control.visualFocus ? 2 : 0
+ visible: !control.flat || control.down
+ }
+
+ popup: T.Popup {
+ y: control.height
+ width: control.width
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
+ topMargin: 6
+ bottomMargin: 6
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ Rectangle {
+ z: 10
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+ border.color: control.palette.mid
+ }
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/Container.qml b/src/quickcontrols/basic/Container.qml
new file mode 100644
index 0000000000..28e50279f0
--- /dev/null
+++ b/src/quickcontrols/basic/Container.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Container {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+}
diff --git a/src/quickcontrols/basic/Control.qml b/src/quickcontrols/basic/Control.qml
new file mode 100644
index 0000000000..20b27136db
--- /dev/null
+++ b/src/quickcontrols/basic/Control.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Control {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+}
diff --git a/src/quickcontrols/basic/DayOfWeekRow.qml b/src/quickcontrols/basic/DayOfWeekRow.qml
new file mode 100644
index 0000000000..0de64264ba
--- /dev/null
+++ b/src/quickcontrols/basic/DayOfWeekRow.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractDayOfWeekRow {
+ id: control
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ contentItem.implicitHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ topPadding: 6
+ bottomPadding: 6
+ font.bold: true
+
+ //! [delegate]
+ delegate: Text {
+ text: shortName
+ font: control.font
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property string shortName
+ }
+ //! [delegate]
+
+ //! [contentItem]
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.source
+ delegate: control.delegate
+ }
+ }
+ //! [contentItem]
+}
diff --git a/src/quickcontrols/basic/DelayButton.qml b/src/quickcontrols/basic/DelayButton.qml
new file mode 100644
index 0000000000..1be4450c69
--- /dev/null
+++ b/src/quickcontrols/basic/DelayButton.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.DelayButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ horizontalPadding: padding + 2
+
+ transition: Transition {
+ NumberAnimation {
+ duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
+ }
+ }
+
+ contentItem: ItemGroup {
+ ClippedText {
+ clip: control.progress > 0
+ clipX: -control.leftPadding + control.progress * control.width
+ clipWidth: (1.0 - control.progress) * control.width
+ visible: control.progress < 1
+
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1 : 0.3
+ color: control.palette.buttonText
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ ClippedText {
+ clip: control.progress > 0
+ clipX: -control.leftPadding
+ clipWidth: control.progress * control.width
+ visible: control.progress > 0
+
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1 : 0.3
+ color: control.palette.brightText
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ color: Color.blend(control.palette.button, control.palette.mid, control.down ? 0.5 : 0.0)
+ border.color: control.palette.highlight
+ border.width: control.visualFocus ? 2 : 0
+
+ PaddedRectangle {
+ padding: control.visualFocus ? 2 : 0
+ width: control.progress * parent.width
+ height: parent.height
+ color: Color.blend(control.palette.dark, control.palette.mid, control.down ? 0.5 : 0.0)
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/Dial.qml b/src/quickcontrols/basic/Dial.qml
new file mode 100644
index 0000000000..3692ae22de
--- /dev/null
+++ b/src/quickcontrols/basic/Dial.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Basic.impl
+import QtQuick.Templates as T
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ background: DialImpl {
+ implicitWidth: 184
+ implicitHeight: 184
+ color: control.visualFocus ? control.palette.highlight : control.palette.dark
+ progress: control.position
+ opacity: control.enabled ? 1 : 0.3
+ }
+
+ handle: ColorImage {
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+ width: 14
+ height: 10
+ defaultColor: "#353637"
+ color: control.visualFocus ? control.palette.highlight : control.palette.dark
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/dial-indicator.png"
+ antialiasing: true
+ opacity: control.enabled ? 1 : 0.3
+ transform: [
+ Translate {
+ y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: control.handle.width / 2
+ origin.y: control.handle.height / 2
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/basic/Dialog.qml b/src/quickcontrols/basic/Dialog.qml
new file mode 100644
index 0000000000..c4c59b27fb
--- /dev/null
+++ b/src/quickcontrols/basic/Dialog.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.palette.window
+ border.color: control.palette.dark
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ padding: 12
+ background: Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 1
+ color: control.palette.window
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}
diff --git a/src/quickcontrols/basic/DialogButtonBox.qml b/src/quickcontrols/basic/DialogButtonBox.qml
new file mode 100644
index 0000000000..89fca1e41d
--- /dev/null
+++ b/src/quickcontrols/basic/DialogButtonBox.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+ contentWidth: contentItem.contentWidth
+
+ spacing: 1
+ padding: 12
+ alignment: count === 1 ? Qt.AlignRight : undefined
+
+ delegate: Button {
+ width: control.count === 1 ? control.availableWidth / 2 : undefined
+ }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: Rectangle {
+ implicitHeight: 40
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/basic/Drawer.qml b/src/quickcontrols/basic/Drawer.qml
new file mode 100644
index 0000000000..c69d319e92
--- /dev/null
+++ b/src/quickcontrols/basic/Drawer.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: control.edge === Qt.BottomEdge
+ leftPadding: control.edge === Qt.RightEdge
+ rightPadding: control.edge === Qt.LeftEdge
+ bottomPadding: control.edge === Qt.TopEdge
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ background: Rectangle {
+ color: control.palette.window
+ Rectangle {
+ readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
+ width: horizontal ? 1 : parent.width
+ height: horizontal ? parent.height : 1
+ color: control.palette.dark
+ x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0
+ y: control.edge === Qt.TopEdge ? parent.height - 1 : 0
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}
diff --git a/src/quickcontrols/basic/Frame.qml b/src/quickcontrols/basic/Frame.qml
new file mode 100644
index 0000000000..d1ecc4b9df
--- /dev/null
+++ b/src/quickcontrols/basic/Frame.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: control.palette.mid
+ }
+}
diff --git a/src/quickcontrols/basic/GroupBox.qml b/src/quickcontrols/basic/GroupBox.qml
new file mode 100644
index 0000000000..510acf1586
--- /dev/null
+++ b/src/quickcontrols/basic/GroupBox.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 12
+ topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+
+ label: Text {
+ x: control.leftPadding
+ width: control.availableWidth
+
+ text: control.title
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+
+ color: "transparent"
+ border.color: control.palette.mid
+ }
+}
diff --git a/src/quickcontrols/basic/HorizontalHeaderView.qml b/src/quickcontrols/basic/HorizontalHeaderView.qml
new file mode 100644
index 0000000000..140c9f3ae8
--- /dev/null
+++ b/src/quickcontrols/basic/HorizontalHeaderView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.HorizontalHeaderView {
+ id: control
+
+ implicitWidth: syncView ? syncView.width : 0
+ implicitHeight: contentHeight
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: text.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
+ color: "#f6f6f6"
+ border.color: "#e4e4e4"
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/ItemDelegate.qml b/src/quickcontrols/basic/ItemDelegate.qml
new file mode 100644
index 0000000000..7bef49d6d6
--- /dev/null
+++ b/src/quickcontrols/basic/ItemDelegate.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 8
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? control.palette.highlightedText : control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted || control.visualFocus
+ color: Color.blend(control.down ? control.palette.midlight : control.palette.light,
+ control.palette.highlight, control.visualFocus ? 0.15 : 0.0)
+ }
+}
diff --git a/src/quickcontrols/basic/Label.qml b/src/quickcontrols/basic/Label.qml
new file mode 100644
index 0000000000..e3274142c2
--- /dev/null
+++ b/src/quickcontrols/basic/Label.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Label {
+ id: control
+
+ color: control.palette.windowText
+ linkColor: control.palette.link
+}
diff --git a/src/quickcontrols/basic/Menu.qml b/src/quickcontrols/basic/Menu.qml
new file mode 100644
index 0000000000..fd21f5de5b
--- /dev/null
+++ b/src/quickcontrols/basic/Menu.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Menu {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 0
+ overlap: 1
+
+ delegate: MenuItem { }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ color: control.palette.window
+ border.color: control.palette.dark
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}
diff --git a/src/quickcontrols/basic/MenuBar.qml b/src/quickcontrols/basic/MenuBar.qml
new file mode 100644
index 0000000000..c0d4bda60d
--- /dev/null
+++ b/src/quickcontrols/basic/MenuBar.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.MenuBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuBarItem { }
+
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.contentModel
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: control.palette.button
+ }
+}
diff --git a/src/quickcontrols/basic/MenuBarItem.qml b/src/quickcontrols/basic/MenuBarItem.qml
new file mode 100644
index 0000000000..9362d26c15
--- /dev/null
+++ b/src/quickcontrols/basic/MenuBarItem.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.MenuBarItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 6
+ leftPadding: 12
+ rightPadding: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.down || control.highlighted ? control.palette.mid : "transparent"
+ }
+}
diff --git a/src/quickcontrols/basic/MenuItem.qml b/src/quickcontrols/basic/MenuItem.qml
new file mode 100644
index 0000000000..ad50eacad9
--- /dev/null
+++ b/src/quickcontrols/basic/MenuItem.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.windowText
+
+ contentItem: IconLabel {
+ readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
+ readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
+ rightPadding: control.mirrored ? indicatorPadding : arrowPadding
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.checked
+ source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png" : ""
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+
+ arrow: ColorImage {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.subMenu
+ mirror: control.mirrored
+ source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png" : ""
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ x: 1
+ y: 1
+ width: control.width - 2
+ height: control.height - 2
+ color: control.down ? control.palette.midlight : control.highlighted ? control.palette.light : "transparent"
+ }
+}
diff --git a/src/quickcontrols/basic/MenuSeparator.qml b/src/quickcontrols/basic/MenuSeparator.qml
new file mode 100644
index 0000000000..ff7e79e784
--- /dev/null
+++ b/src/quickcontrols/basic/MenuSeparator.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+ verticalPadding: padding + 4
+
+ contentItem: Rectangle {
+ implicitWidth: 188
+ implicitHeight: 1
+ color: control.palette.mid
+ }
+}
diff --git a/src/quickcontrols/basic/MonthGrid.qml b/src/quickcontrols/basic/MonthGrid.qml
new file mode 100644
index 0000000000..b8d2379bcf
--- /dev/null
+++ b/src/quickcontrols/basic/MonthGrid.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractMonthGrid {
+ id: control
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ contentItem.implicitHeight + topPadding + bottomPadding)
+
+ spacing: 6
+
+ //! [delegate]
+ delegate: Text {
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ opacity: model.month === control.month ? 1 : 0
+ text: model.day
+ font: control.font
+
+ required property var model
+ }
+ //! [delegate]
+
+ //! [contentItem]
+ contentItem: Grid {
+ rows: 6
+ columns: 7
+ rowSpacing: control.spacing
+ columnSpacing: control.spacing
+
+ Repeater {
+ model: control.source
+ delegate: control.delegate
+ }
+ }
+ //! [contentItem]
+}
diff --git a/src/quickcontrols/basic/Page.qml b/src/quickcontrols/basic/Page.qml
new file mode 100644
index 0000000000..b6d503e65d
--- /dev/null
+++ b/src/quickcontrols/basic/Page.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Page {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/basic/PageIndicator.qml b/src/quickcontrols/basic/PageIndicator.qml
new file mode 100644
index 0000000000..e858695d0c
--- /dev/null
+++ b/src/quickcontrols/basic/PageIndicator.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ delegate: Rectangle {
+ implicitWidth: 8
+ implicitHeight: 8
+
+ radius: width / 2
+ color: control.palette.dark
+
+ opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45
+
+ required property int index
+
+ Behavior on opacity { OpacityAnimator { duration: 100 } }
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/Pane.qml b/src/quickcontrols/basic/Pane.qml
new file mode 100644
index 0000000000..46e15e2966
--- /dev/null
+++ b/src/quickcontrols/basic/Pane.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Pane {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/basic/Popup.qml b/src/quickcontrols/basic/Popup.qml
new file mode 100644
index 0000000000..f4b787c311
--- /dev/null
+++ b/src/quickcontrols/basic/Popup.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.palette.window
+ border.color: control.palette.dark
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.5)
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent(control.palette.shadow, 0.12)
+ }
+}
diff --git a/src/quickcontrols/basic/ProgressBar.qml b/src/quickcontrols/basic/ProgressBar.qml
new file mode 100644
index 0000000000..09ab1fb2c1
--- /dev/null
+++ b/src/quickcontrols/basic/ProgressBar.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Basic.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: ProgressBarImpl {
+ implicitHeight: 6
+ implicitWidth: 116
+ scale: control.mirrored ? -1 : 1
+ progress: control.position
+ indeterminate: control.visible && control.indeterminate
+ color: control.palette.dark
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 6
+ y: (control.height - height) / 2
+ height: 6
+
+ color: control.palette.midlight
+ }
+}
diff --git a/src/quickcontrols/basic/RadioButton.qml b/src/quickcontrols/basic/RadioButton.qml
new file mode 100644
index 0000000000..7b3f4063e1
--- /dev/null
+++ b/src/quickcontrols/basic/RadioButton.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ // keep in sync with RadioDelegate.qml (shared RadioIndicator.qml was removed for performance reasons)
+ indicator: Rectangle {
+ implicitWidth: 28
+ implicitHeight: 28
+
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ radius: width / 2
+ color: control.down ? control.palette.light : control.palette.base
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 20
+ height: 20
+ radius: width / 2
+ color: control.palette.text
+ visible: control.checked
+ }
+ }
+
+ contentItem: CheckLabel {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+}
diff --git a/src/quickcontrols/basic/RadioDelegate.qml b/src/quickcontrols/basic/RadioDelegate.qml
new file mode 100644
index 0000000000..87e6e66b29
--- /dev/null
+++ b/src/quickcontrols/basic/RadioDelegate.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 12
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ // keep in sync with RadioButton.qml (shared RadioIndicator.qml was removed for performance reasons)
+ indicator: Rectangle {
+ implicitWidth: 28
+ implicitHeight: 28
+
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ radius: width / 2
+ color: control.down ? control.palette.light : control.palette.base
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.palette.mid
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 20
+ height: 20
+ radius: width / 2
+ color: control.palette.text
+ visible: control.checked
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? control.palette.midlight : control.palette.light
+ }
+}
diff --git a/src/quickcontrols/basic/RangeSlider.qml b/src/quickcontrols/basic/RangeSlider.qml
new file mode 100644
index 0000000000..155807da8d
--- /dev/null
+++ b/src/quickcontrols/basic/RangeSlider.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ first.implicitHandleWidth + leftPadding + rightPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ first.implicitHandleHeight + topPadding + bottomPadding,
+ second.implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ first.handle: Rectangle {
+ x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
+ implicitWidth: 28
+ implicitHeight: 28
+ radius: width / 2
+ border.width: activeFocus ? 2 : 1
+ border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
+ color: control.first.pressed ? control.palette.light : control.palette.window
+ }
+
+ second.handle: Rectangle {
+ x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
+ implicitWidth: 28
+ implicitHeight: 28
+ radius: width / 2
+ border.width: activeFocus ? 2 : 1
+ border.color: activeFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
+ color: control.second.pressed ? control.palette.light : control.palette.window
+ }
+
+ background: Rectangle {
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ implicitWidth: control.horizontal ? 200 : 6
+ implicitHeight: control.horizontal ? 6 : 200
+ width: control.horizontal ? control.availableWidth : implicitWidth
+ height: control.horizontal ? implicitHeight : control.availableHeight
+ radius: 3
+ color: control.palette.midlight
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ Rectangle {
+ x: control.horizontal ? control.first.position * parent.width + 3 : 0
+ y: control.horizontal ? 0 : control.second.visualPosition * parent.height + 3
+ width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width - 6 : 6
+ height: control.horizontal ? 6 : control.second.position * parent.height - control.first.position * parent.height - 6
+
+ color: control.palette.dark
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/RoundButton.qml b/src/quickcontrols/basic/RoundButton.qml
new file mode 100644
index 0000000000..7e7bd039b0
--- /dev/null
+++ b/src/quickcontrols/basic/RoundButton.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.RoundButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.checked || control.highlighted ? control.palette.brightText :
+ control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.checked || control.highlighted ? control.palette.brightText :
+ control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ radius: control.radius
+ opacity: enabled ? 1 : 0.3
+ visible: !control.flat || control.down || control.checked || control.highlighted
+ color: Color.blend(control.checked || control.highlighted ? control.palette.dark : control.palette.button,
+ control.palette.mid, control.down ? 0.5 : 0.0)
+ border.color: control.palette.highlight
+ border.width: control.visualFocus ? 2 : 0
+ }
+}
diff --git a/src/quickcontrols/basic/ScrollBar.qml b/src/quickcontrols/basic/ScrollBar.qml
new file mode 100644
index 0000000000..8927a4f13f
--- /dev/null
+++ b/src/quickcontrols/basic/ScrollBar.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ contentItem: Rectangle {
+ implicitWidth: control.interactive ? 6 : 2
+ implicitHeight: control.interactive ? 6 : 2
+
+ radius: width / 2
+ color: control.pressed ? control.palette.dark : control.palette.mid
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/ScrollIndicator.qml b/src/quickcontrols/basic/ScrollIndicator.qml
new file mode 100644
index 0000000000..8b1ca93c26
--- /dev/null
+++ b/src/quickcontrols/basic/ScrollIndicator.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+
+ contentItem: Rectangle {
+ implicitWidth: 2
+ implicitHeight: 2
+
+ color: control.palette.mid
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.active
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: [
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/basic/ScrollView.qml b/src/quickcontrols/basic/ScrollView.qml
new file mode 100644
index 0000000000..aab91a3bcc
--- /dev/null
+++ b/src/quickcontrols/basic/ScrollView.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/basic/SelectionRectangle.qml b/src/quickcontrols/basic/SelectionRectangle.qml
new file mode 100644
index 0000000000..8e16d10418
--- /dev/null
+++ b/src/quickcontrols/basic/SelectionRectangle.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Shapes
+import QtQuick.Templates as T
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: Handle {}
+ bottomRightHandle: Handle {}
+
+ component Handle : Rectangle {
+ id: handle
+ width: 28
+ height: width
+ radius: width / 2
+ color: SelectionRectangle.dragging ? control.palette.light : control.palette.window
+ border.width: 1
+ border.color: control.enabled ? control.palette.mid : control.palette.midlight
+ visible: SelectionRectangle.control.active
+
+ property Item control: SelectionRectangle.control
+ }
+
+}
diff --git a/src/quickcontrols/basic/Slider.qml b/src/quickcontrols/basic/Slider.qml
new file mode 100644
index 0000000000..7ca8e02bf1
--- /dev/null
+++ b/src/quickcontrols/basic/Slider.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ handle: Rectangle {
+ x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
+ implicitWidth: 28
+ implicitHeight: 28
+ radius: width / 2
+ color: control.pressed ? control.palette.light : control.palette.window
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
+ }
+
+ background: Rectangle {
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ implicitWidth: control.horizontal ? 200 : 6
+ implicitHeight: control.horizontal ? 6 : 200
+ width: control.horizontal ? control.availableWidth : implicitWidth
+ height: control.horizontal ? implicitHeight : control.availableHeight
+ radius: 3
+ color: control.palette.midlight
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ Rectangle {
+ y: control.horizontal ? 0 : control.visualPosition * parent.height
+ width: control.horizontal ? control.position * parent.width : 6
+ height: control.horizontal ? 6 : control.position * parent.height
+
+ radius: 3
+ color: control.palette.dark
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/SpinBox.qml b/src/quickcontrols/basic/SpinBox.qml
new file mode 100644
index 0000000000..758472c5cb
--- /dev/null
+++ b/src/quickcontrols/basic/SpinBox.qml
@@ -0,0 +1,101 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth + 2 * padding +
+ up.implicitIndicatorWidth +
+ down.implicitIndicatorWidth)
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight,
+ down.implicitIndicatorHeight)
+
+ padding: 6
+ leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
+ rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ z: 2
+ text: control.displayText
+
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+
+ Rectangle {
+ x: -6 - (control.down.indicator ? 1 : 0)
+ y: -6
+ width: control.width - (control.up.indicator ? control.up.indicator.width - 1 : 0) - (control.down.indicator ? control.down.indicator.width - 1 : 0)
+ height: control.height
+ visible: control.activeFocus
+ color: "transparent"
+ border.color: control.palette.highlight
+ border.width: 2
+ }
+ }
+
+ up.indicator: Rectangle {
+ x: control.mirrored ? 0 : control.width - width
+ height: control.height
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.up.pressed ? control.palette.mid : control.palette.button
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 3
+ height: 2
+ color: enabled ? control.palette.buttonText : control.palette.mid
+ }
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 2
+ height: parent.width / 3
+ color: enabled ? control.palette.buttonText : control.palette.mid
+ }
+ }
+
+ down.indicator: Rectangle {
+ x: control.mirrored ? parent.width - width : 0
+ height: control.height
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.down.pressed ? control.palette.mid : control.palette.button
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 3
+ height: 2
+ color: enabled ? control.palette.buttonText : control.palette.mid
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ color: enabled ? control.palette.base : control.palette.button
+ border.color: control.palette.button
+ }
+}
diff --git a/src/quickcontrols/basic/SplitView.qml b/src/quickcontrols/basic/SplitView.qml
new file mode 100644
index 0000000000..6d673b55b7
--- /dev/null
+++ b/src/quickcontrols/basic/SplitView.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.SplitView {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: Rectangle {
+ implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width
+ implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6
+ color: T.SplitHandle.pressed ? control.palette.mid
+ : (T.SplitHandle.hovered ? control.palette.midlight : control.palette.button)
+ }
+}
diff --git a/src/quickcontrols/basic/StackView.qml b/src/quickcontrols/basic/StackView.qml
new file mode 100644
index 0000000000..689d7ff9ca
--- /dev/null
+++ b/src/quickcontrols/basic/StackView.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.StackView {
+ id: control
+
+ popEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ popExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ pushEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ pushExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ replaceEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ replaceExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+}
diff --git a/src/quickcontrols/basic/SwipeDelegate.qml b/src/quickcontrols/basic/SwipeDelegate.qml
new file mode 100644
index 0000000000..552f34dc01
--- /dev/null
+++ b/src/quickcontrols/basic/SwipeDelegate.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 12
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ color: Color.blend(control.down ? control.palette.midlight : control.palette.light,
+ control.palette.highlight, control.visualFocus ? 0.15 : 0.0)
+ }
+}
diff --git a/src/quickcontrols/basic/SwipeView.qml b/src/quickcontrols/basic/SwipeView.qml
new file mode 100644
index 0000000000..b0068fd301
--- /dev/null
+++ b/src/quickcontrols/basic/SwipeView.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SwipeView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ contentItem: ListView {
+ model: control.contentModel
+ interactive: control.interactive
+ currentIndex: control.currentIndex
+ focus: control.focus
+
+ spacing: control.spacing
+ orientation: control.orientation
+ snapMode: ListView.SnapOneItem
+ boundsBehavior: Flickable.StopAtBounds
+
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
+ highlightMoveDuration: 250
+ maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height)
+ }
+}
diff --git a/src/quickcontrols/basic/Switch.qml b/src/quickcontrols/basic/Switch.qml
new file mode 100644
index 0000000000..d299ea3748
--- /dev/null
+++ b/src/quickcontrols/basic/Switch.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ indicator: PaddedRectangle {
+ implicitWidth: 56
+ implicitHeight: 28
+
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ radius: 8
+ leftPadding: 0
+ rightPadding: 0
+ padding: (height - 16) / 2
+ color: control.checked ? control.palette.dark : control.palette.midlight
+
+ Rectangle {
+ x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+ width: 28
+ height: 28
+ radius: 16
+ color: control.down ? control.palette.light : control.palette.window
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+ }
+
+ contentItem: CheckLabel {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+}
diff --git a/src/quickcontrols/basic/SwitchDelegate.qml b/src/quickcontrols/basic/SwitchDelegate.qml
new file mode 100644
index 0000000000..98392557ad
--- /dev/null
+++ b/src/quickcontrols/basic/SwitchDelegate.qml
@@ -0,0 +1,75 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 12
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ indicator: PaddedRectangle {
+ implicitWidth: 56
+ implicitHeight: 28
+
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ radius: 8
+ leftPadding: 0
+ rightPadding: 0
+ padding: (height - 16) / 2
+ color: control.checked ? control.palette.dark : control.palette.midlight
+
+ Rectangle {
+ x: Math.max(0, Math.min(parent.width - width, control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+ width: 28
+ height: 28
+ radius: 16
+ color: control.down ? control.palette.light : control.palette.window
+ border.width: control.visualFocus ? 2 : 1
+ border.color: control.visualFocus ? control.palette.highlight : control.enabled ? control.palette.mid : control.palette.midlight
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? control.palette.midlight : control.palette.light
+ }
+}
diff --git a/src/quickcontrols/basic/TabBar.qml b/src/quickcontrols/basic/TabBar.qml
new file mode 100644
index 0000000000..f8bdb91460
--- /dev/null
+++ b/src/quickcontrols/basic/TabBar.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 1
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 0
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 40
+ preferredHighlightEnd: width - 40
+ }
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/basic/TabButton.qml b/src/quickcontrols/basic/TabButton.qml
new file mode 100644
index 0000000000..071048dce5
--- /dev/null
+++ b/src/quickcontrols/basic/TabButton.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: checked ? control.palette.windowText : control.palette.brightText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.checked ? control.palette.windowText : control.palette.brightText
+ }
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: Color.blend(control.checked ? control.palette.window : control.palette.dark,
+ control.palette.mid, control.down ? 0.5 : 0.0)
+ }
+}
diff --git a/src/quickcontrols/basic/TextArea.qml b/src/quickcontrols/basic/TextArea.qml
new file mode 100644
index 0000000000..0dc7c4558e
--- /dev/null
+++ b/src/quickcontrols/basic/TextArea.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ padding: 6
+ leftPadding: padding + 4
+
+ color: control.palette.text
+ placeholderTextColor: control.palette.placeholderText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+}
diff --git a/src/quickcontrols/basic/TextField.qml b/src/quickcontrols/basic/TextField.qml
new file mode 100644
index 0000000000..cf542a6886
--- /dev/null
+++ b/src/quickcontrols/basic/TextField.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ padding: 6
+ leftPadding: padding + 4
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+ verticalAlignment: TextInput.AlignVCenter
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ border.width: control.activeFocus ? 2 : 1
+ color: control.palette.base
+ border.color: control.activeFocus ? control.palette.highlight : control.palette.mid
+ }
+}
diff --git a/src/quickcontrols/basic/ToolBar.qml b/src/quickcontrols/basic/ToolBar.qml
new file mode 100644
index 0000000000..6ef70bc99c
--- /dev/null
+++ b/src/quickcontrols/basic/ToolBar.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: control.palette.button
+ }
+}
diff --git a/src/quickcontrols/basic/ToolButton.qml b/src/quickcontrols/basic/ToolButton.qml
new file mode 100644
index 0000000000..e4bc90d665
--- /dev/null
+++ b/src/quickcontrols/basic/ToolButton.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: visualFocus ? control.palette.highlight : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.visualFocus ? control.palette.highlight : control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+
+ opacity: control.down ? 1.0 : 0.5
+ color: control.down || control.checked || control.highlighted ? control.palette.mid : control.palette.button
+ }
+}
diff --git a/src/quickcontrols/basic/ToolSeparator.qml b/src/quickcontrols/basic/ToolSeparator.qml
new file mode 100644
index 0000000000..2d2cefcdf4
--- /dev/null
+++ b/src/quickcontrols/basic/ToolSeparator.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ToolSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: vertical ? 6 : 2
+ verticalPadding: vertical ? 2 : 6
+
+ contentItem: Rectangle {
+ implicitWidth: control.vertical ? 1 : 30
+ implicitHeight: control.vertical ? 30 : 1
+ color: control.palette.mid
+ }
+}
diff --git a/src/quickcontrols/basic/ToolTip.qml b/src/quickcontrols/basic/ToolTip.qml
new file mode 100644
index 0000000000..6d71f55db3
--- /dev/null
+++ b/src/quickcontrols/basic/ToolTip.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0
+ y: -implicitHeight - 3
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 6
+ padding: 6
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ color: control.palette.toolTipText
+ }
+
+ background: Rectangle {
+ border.color: control.palette.dark
+ color: control.palette.toolTipBase
+ }
+}
diff --git a/src/quickcontrols/basic/TreeViewDelegate.qml b/src/quickcontrols/basic/TreeViewDelegate.qml
new file mode 100644
index 0000000000..fc9a072c43
--- /dev/null
+++ b/src/quickcontrols/basic/TreeViewDelegate.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(indicator ? indicator.height : 0, implicitContentHeight) * 1.25
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 4
+ rightMargin: 4
+ spacing: 4
+
+ topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
+ leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
+
+ highlighted: control.selected || control.current
+ || ((control.treeView.selectionBehavior === TableView.SelectRows
+ || control.treeView.selectionBehavior === TableView.SelectionDisabled)
+ && control.row === control.treeView.currentRow)
+
+ required property int row
+ required property var model
+ readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
+
+ indicator: Item {
+ // Create an area that is big enough for the user to
+ // click on, since the image is a bit small.
+ readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
+ x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
+ y: (control.height - height) / 2
+ implicitWidth: 20
+ implicitHeight: 40 // same as Button.qml
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0)
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/arrow-indicator.png"
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 40 // same as Button.qml
+ color: control.highlighted
+ ? control.palette.highlight
+ : (control.treeView.alternatingRows && control.row % 2 !== 0
+ ? control.palette.alternateBase : control.palette.base)
+ }
+
+ contentItem: Label {
+ clip: false
+ text: control.model.display
+ elide: Text.ElideRight
+ color: control.highlighted ? control.palette.highlightedText : control.palette.buttonText
+ }
+}
diff --git a/src/quickcontrols/basic/Tumbler.qml b/src/quickcontrols/basic/Tumbler.qml
new file mode 100644
index 0000000000..d3d1254fea
--- /dev/null
+++ b/src/quickcontrols/basic/Tumbler.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.Tumbler {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ delegate: Text {
+ text: modelData
+ color: control.visualFocus ? control.palette.highlight : control.palette.text
+ font: control.font
+ opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ // We use required property here to satisfy qmllint, but that means
+ // we also need to declare the index for the attached properties
+ // (see QQuickTumblerAttachedPrivate::init).
+ required property var modelData
+ required property int index
+ }
+
+ contentItem: TumblerView {
+ implicitWidth: 60
+ implicitHeight: 200
+ model: control.model
+ delegate: control.delegate
+ path: Path {
+ startX: control.contentItem.width / 2
+ startY: -control.contentItem.delegateHeight / 2
+ PathLine {
+ x: control.contentItem.width / 2
+ y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: control.availableHeight / control.visibleItemCount
+ }
+}
diff --git a/src/quickcontrols/basic/VerticalHeaderView.qml b/src/quickcontrols/basic/VerticalHeaderView.qml
new file mode 100644
index 0000000000..a59e228d20
--- /dev/null
+++ b/src/quickcontrols/basic/VerticalHeaderView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.VerticalHeaderView {
+ id: control
+
+ implicitWidth: contentWidth
+ implicitHeight: syncView ? syncView.height : 0
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
+ implicitHeight: text.implicitHeight + (cellPadding * 2)
+ color: "#f6f6f6"
+ border.color: "#e4e4e4"
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/basic/WeekNumberColumn.qml b/src/quickcontrols/basic/WeekNumberColumn.qml
new file mode 100644
index 0000000000..e5ce90bf3c
--- /dev/null
+++ b/src/quickcontrols/basic/WeekNumberColumn.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.AbstractWeekNumberColumn {
+ id: control
+
+ implicitWidth: Math.max(background ? background.implicitWidth : 0,
+ contentItem.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(background ? background.implicitHeight : 0,
+ contentItem.implicitHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ leftPadding: 6
+ rightPadding: 6
+ font.bold: true
+
+ //! [delegate]
+ delegate: Text {
+ text: weekNumber
+ font: control.font
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property int weekNumber
+ }
+ //! [delegate]
+
+ //! [contentItem]
+ contentItem: Column {
+ spacing: control.spacing
+ Repeater {
+ model: control.source
+ delegate: control.delegate
+ }
+ }
+ //! [contentItem]
+}
diff --git a/src/quickcontrols/basic/images/arrow-indicator.png b/src/quickcontrols/basic/images/arrow-indicator.png
new file mode 100644
index 0000000000..d833d52c40
--- /dev/null
+++ b/src/quickcontrols/basic/images/arrow-indicator.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/arrow-indicator@2x.png b/src/quickcontrols/basic/images/arrow-indicator@2x.png
new file mode 100644
index 0000000000..55c7940a51
--- /dev/null
+++ b/src/quickcontrols/basic/images/arrow-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/arrow-indicator@3x.png b/src/quickcontrols/basic/images/arrow-indicator@3x.png
new file mode 100644
index 0000000000..c7067c5cd0
--- /dev/null
+++ b/src/quickcontrols/basic/images/arrow-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/arrow-indicator@4x.png b/src/quickcontrols/basic/images/arrow-indicator@4x.png
new file mode 100644
index 0000000000..4c5cf3515a
--- /dev/null
+++ b/src/quickcontrols/basic/images/arrow-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/check.png b/src/quickcontrols/basic/images/check.png
new file mode 100644
index 0000000000..479a84428d
--- /dev/null
+++ b/src/quickcontrols/basic/images/check.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/check@2x.png b/src/quickcontrols/basic/images/check@2x.png
new file mode 100644
index 0000000000..79663c0b03
--- /dev/null
+++ b/src/quickcontrols/basic/images/check@2x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/check@3x.png b/src/quickcontrols/basic/images/check@3x.png
new file mode 100644
index 0000000000..fd0135abe2
--- /dev/null
+++ b/src/quickcontrols/basic/images/check@3x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/check@4x.png b/src/quickcontrols/basic/images/check@4x.png
new file mode 100644
index 0000000000..e7e0b64044
--- /dev/null
+++ b/src/quickcontrols/basic/images/check@4x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/dial-indicator.png b/src/quickcontrols/basic/images/dial-indicator.png
new file mode 100644
index 0000000000..92357c51d4
--- /dev/null
+++ b/src/quickcontrols/basic/images/dial-indicator.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/dial-indicator@2x.png b/src/quickcontrols/basic/images/dial-indicator@2x.png
new file mode 100644
index 0000000000..f436443b0a
--- /dev/null
+++ b/src/quickcontrols/basic/images/dial-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/dial-indicator@3x.png b/src/quickcontrols/basic/images/dial-indicator@3x.png
new file mode 100644
index 0000000000..d883045bcb
--- /dev/null
+++ b/src/quickcontrols/basic/images/dial-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/dial-indicator@4x.png b/src/quickcontrols/basic/images/dial-indicator@4x.png
new file mode 100644
index 0000000000..794777128b
--- /dev/null
+++ b/src/quickcontrols/basic/images/dial-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/double-arrow.png b/src/quickcontrols/basic/images/double-arrow.png
new file mode 100644
index 0000000000..3ecd7f89f3
--- /dev/null
+++ b/src/quickcontrols/basic/images/double-arrow.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/double-arrow@2x.png b/src/quickcontrols/basic/images/double-arrow@2x.png
new file mode 100644
index 0000000000..eeb03e2847
--- /dev/null
+++ b/src/quickcontrols/basic/images/double-arrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/double-arrow@3x.png b/src/quickcontrols/basic/images/double-arrow@3x.png
new file mode 100644
index 0000000000..f0662d2026
--- /dev/null
+++ b/src/quickcontrols/basic/images/double-arrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/double-arrow@4x.png b/src/quickcontrols/basic/images/double-arrow@4x.png
new file mode 100644
index 0000000000..10891e9133
--- /dev/null
+++ b/src/quickcontrols/basic/images/double-arrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/drop-indicator.png b/src/quickcontrols/basic/images/drop-indicator.png
new file mode 100644
index 0000000000..80c1d958e3
--- /dev/null
+++ b/src/quickcontrols/basic/images/drop-indicator.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/drop-indicator@2x.png b/src/quickcontrols/basic/images/drop-indicator@2x.png
new file mode 100644
index 0000000000..6e0f228c54
--- /dev/null
+++ b/src/quickcontrols/basic/images/drop-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/drop-indicator@3x.png b/src/quickcontrols/basic/images/drop-indicator@3x.png
new file mode 100644
index 0000000000..199752fbf8
--- /dev/null
+++ b/src/quickcontrols/basic/images/drop-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/basic/images/drop-indicator@4x.png b/src/quickcontrols/basic/images/drop-indicator@4x.png
new file mode 100644
index 0000000000..58311fbe2a
--- /dev/null
+++ b/src/quickcontrols/basic/images/drop-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/basic/impl/CMakeLists.txt b/src/quickcontrols/basic/impl/CMakeLists.txt
new file mode 100644
index 0000000000..ec79fafdda
--- /dev/null
+++ b/src/quickcontrols/basic/impl/CMakeLists.txt
@@ -0,0 +1,28 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2basicstyleimplplugin Plugin:
+#####################################################################
+
+qt_internal_add_qml_module(qtquickcontrols2basicstyleimplplugin
+ URI "QtQuick.Controls.Basic.impl"
+ VERSION "${PROJECT_VERSION}"
+ CLASS_NAME QtQuickControls2BasicStyleImplPlugin
+ PLUGIN_TARGET qtquickcontrols2basicstyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ SOURCES
+ qquickbasicbusyindicator.cpp qquickbasicbusyindicator_p.h
+ qquickbasicdial.cpp qquickbasicdial_p.h
+ qquickbasicprogressbar.cpp qquickbasicprogressbar_p.h
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp
new file mode 100644
index 0000000000..2acefa2bed
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator.cpp
@@ -0,0 +1,192 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasicbusyindicator_p.h"
+
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int CircleCount = 10;
+static const int TotalDuration = 100 * CircleCount * 2;
+static const QRgb TransparentColor = 0x00000000;
+
+static QPointF moveCircle(const QPointF &pos, qreal rotation, qreal distance)
+{
+ return pos - QTransform().rotate(rotation).map(QPointF(0, distance));
+}
+
+class QQuickBasicBusyIndicatorNode : public QQuickAnimatedNode
+{
+public:
+ QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ QColor m_pen;
+ QColor m_fill;
+};
+
+QQuickBasicBusyIndicatorNode::QQuickBasicBusyIndicatorNode(QQuickBasicBusyIndicator *item)
+ : QQuickAnimatedNode(item)
+{
+ setLoopCount(Infinite);
+ setDuration(TotalDuration);
+ setCurrentTime(item->elapsed());
+
+ for (int i = 0; i < CircleCount; ++i) {
+ QSGTransformNode *transformNode = new QSGTransformNode;
+ appendChildNode(transformNode);
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ transformNode->appendChildNode(rectNode);
+ }
+}
+
+void QQuickBasicBusyIndicatorNode::updateCurrentTime(int time)
+{
+ const qreal percentageComplete = time / qreal(TotalDuration);
+ const qreal firstPhaseProgress = percentageComplete <= 0.5 ? percentageComplete * 2 : 0;
+ const qreal secondPhaseProgress = percentageComplete > 0.5 ? (percentageComplete - 0.5) * 2 : 0;
+
+ QSGTransformNode *transformNode = static_cast<QSGTransformNode*>(firstChild());
+ Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
+ for (int i = 0; i < CircleCount; ++i) {
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode*>(transformNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ const bool fill = (firstPhaseProgress > qreal(i) / CircleCount) || (secondPhaseProgress > 0 && secondPhaseProgress < qreal(i) / CircleCount);
+ rectNode->setColor(fill ? m_fill : QColor::fromRgba(TransparentColor));
+ rectNode->setPenColor(m_pen);
+ rectNode->setPenWidth(1);
+ rectNode->update();
+
+ transformNode = static_cast<QSGTransformNode*>(transformNode->nextSibling());
+ }
+}
+
+void QQuickBasicBusyIndicatorNode::sync(QQuickItem *item)
+{
+ const qreal w = item->width();
+ const qreal h = item->height();
+ const qreal sz = qMin(w, h);
+ const qreal dx = (w - sz) / 2;
+ const qreal dy = (h - sz) / 2;
+ const int circleRadius = sz / 12;
+
+ m_pen = static_cast<QQuickBasicBusyIndicator *>(item)->pen();
+ m_fill = static_cast<QQuickBasicBusyIndicator *>(item)->fill();
+
+ QSGTransformNode *transformNode = static_cast<QSGTransformNode *>(firstChild());
+ for (int i = 0; i < CircleCount; ++i) {
+ Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(transformNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ QPointF pos = QPointF(sz / 2 - circleRadius, sz / 2 - circleRadius);
+ pos = moveCircle(pos, 360.0 / CircleCount * i, sz / 2 - circleRadius);
+
+ QMatrix4x4 m;
+ m.translate(dx + pos.x(), dy + pos.y());
+ transformNode->setMatrix(m);
+
+ rectNode->setRect(QRectF(QPointF(), QSizeF(circleRadius * 2, circleRadius * 2)));
+ rectNode->setRadius(circleRadius);
+
+ transformNode = static_cast<QSGTransformNode *>(transformNode->nextSibling());
+ }
+}
+
+QQuickBasicBusyIndicator::QQuickBasicBusyIndicator(QQuickItem *parent) :
+ QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+QColor QQuickBasicBusyIndicator::pen() const
+{
+ return m_pen;
+}
+
+void QQuickBasicBusyIndicator::setPen(const QColor &pen)
+{
+ if (pen == m_pen)
+ return;
+
+ m_pen = pen;
+ update();
+}
+
+QColor QQuickBasicBusyIndicator::fill() const
+{
+ return m_fill;
+}
+
+void QQuickBasicBusyIndicator::setFill(const QColor &fill)
+{
+ if (fill == m_fill)
+ return;
+
+ m_fill = fill;
+ update();
+}
+
+bool QQuickBasicBusyIndicator::isRunning() const
+{
+ return isVisible();
+}
+
+void QQuickBasicBusyIndicator::setRunning(bool running)
+{
+ if (running)
+ setVisible(true);
+}
+
+int QQuickBasicBusyIndicator::elapsed() const
+{
+ return m_elapsed;
+}
+
+void QQuickBasicBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ switch (change) {
+ case ItemOpacityHasChanged:
+ if (qFuzzyIsNull(data.realValue))
+ setVisible(false);
+ break;
+ case ItemVisibleHasChanged:
+ update();
+ break;
+ default:
+ break;
+ }
+}
+
+QSGNode *QQuickBasicBusyIndicator::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
+{
+ QQuickBasicBusyIndicatorNode *node = static_cast<QQuickBasicBusyIndicatorNode *>(oldNode);
+ if (isRunning() && width() > 0 && height() > 0) {
+ if (!node) {
+ node = new QQuickBasicBusyIndicatorNode(this);
+ node->start();
+ }
+ node->sync(this);
+ } else {
+ m_elapsed = node ? node->currentTime() : 0;
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickbasicbusyindicator_p.cpp"
diff --git a/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h
new file mode 100644
index 0000000000..a39b61cde4
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicbusyindicator_p.h
@@ -0,0 +1,61 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKDEFAULTBUSYINDICATOR_P_H
+#define QQUICKDEFAULTBUSYINDICATOR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickitem.h>
+#include <QtGui/qcolor.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickBasicBusyIndicator : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor pen READ pen WRITE setPen FINAL)
+ Q_PROPERTY(QColor fill READ fill WRITE setFill FINAL)
+ Q_PROPERTY(bool running READ isRunning WRITE setRunning)
+ QML_NAMED_ELEMENT(BusyIndicatorImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickBasicBusyIndicator(QQuickItem *parent = nullptr);
+
+ QColor pen() const;
+ void setPen(const QColor &pen);
+
+ QColor fill() const;
+ void setFill(const QColor &fill);
+
+ bool isRunning() const;
+ void setRunning(bool running);
+
+ int elapsed() const;
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ int m_elapsed = 0;
+ QColor m_pen;
+ QColor m_fill;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickBasicBusyIndicator)
+
+#endif // QQUICKDEFAULTBUSYINDICATOR_P_H
diff --git a/src/quickcontrols/basic/impl/qquickbasicdial.cpp b/src/quickcontrols/basic/impl/qquickbasicdial.cpp
new file mode 100644
index 0000000000..8eb2b3840d
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicdial.cpp
@@ -0,0 +1,91 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasicdial_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtGui/qpainter.h>
+#include <QtQuick/private/qquickitem_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickBasicDial::QQuickBasicDial(QQuickItem *parent) :
+ QQuickPaintedItem(parent)
+{
+}
+
+qreal QQuickBasicDial::progress() const
+{
+ return m_progress;
+}
+
+void QQuickBasicDial::setProgress(qreal progress)
+{
+ if (progress == m_progress)
+ return;
+
+ m_progress = progress;
+ update();
+}
+
+QColor QQuickBasicDial::color() const
+{
+ return m_color;
+}
+
+void QQuickBasicDial::setColor(const QColor &color)
+{
+ if (color == m_color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+void QQuickBasicDial::paint(QPainter *painter)
+{
+ if (width() <= 0 || height() <= 0)
+ return;
+
+ QPen pen(m_color);
+ pen.setWidth(8);
+ pen.setCapStyle(Qt::FlatCap);
+ painter->setPen(pen);
+
+ const QRectF bounds = boundingRect();
+ const qreal smallest = qMin(bounds.width(), bounds.height());
+ QRectF rect = QRectF(pen.widthF() / 2.0 + 1, pen.widthF() / 2.0 + 1, smallest - pen.widthF() - 2, smallest - pen.widthF() - 2);
+ rect.moveCenter(bounds.center());
+
+ // Make sure the arc is aligned to whole pixels.
+ if (rect.x() - int(rect.x()) > 0)
+ rect.setX(qCeil(rect.x()));
+ if (rect.y() - int(rect.y()) > 0)
+ rect.setY(qCeil(rect.y()));
+ if (rect.width() - int(rect.width()) > 0)
+ rect.setWidth(qFloor(rect.width()));
+ if (rect.height() - int(rect.height()) > 0)
+ rect.setHeight(qFloor(rect.height()));
+
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ const qreal startAngle = (140 + 90);
+ const qreal spanAngle = (m_progress * 280) * -1;
+ QPainterPath path;
+ path.arcMoveTo(rect, startAngle);
+ path.arcTo(rect, startAngle, spanAngle);
+ painter->drawPath(path);
+
+ rect.adjust(-pen.widthF() / 2.0, -pen.widthF() / 2.0, pen.widthF() / 2.0, pen.widthF() / 2.0);
+ pen.setWidth(1);
+ painter->setPen(pen);
+
+ path = QPainterPath();
+ path.arcMoveTo(rect, 0);
+ path.arcTo(rect, 0, 360);
+ painter->drawPath(path);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickbasicdial_p.cpp"
diff --git a/src/quickcontrols/basic/impl/qquickbasicdial_p.h b/src/quickcontrols/basic/impl/qquickbasicdial_p.h
new file mode 100644
index 0000000000..1406bf6906
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicdial_p.h
@@ -0,0 +1,50 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKDEFAULTDIAL_P_H
+#define QQUICKDEFAULTDIAL_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickpainteditem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickBasicDial : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ QML_NAMED_ELEMENT(DialImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickBasicDial(QQuickItem *parent = nullptr);
+
+ qreal progress() const;
+ void setProgress(qreal progress);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ void paint(QPainter *painter) override;
+
+private:
+ qreal m_progress = 0;
+ QColor m_color = Qt::black;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKDEFAULTDIAL_P_H
diff --git a/src/quickcontrols/basic/impl/qquickbasicprogressbar.cpp b/src/quickcontrols/basic/impl/qquickbasicprogressbar.cpp
new file mode 100644
index 0000000000..4dbe04e4b1
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicprogressbar.cpp
@@ -0,0 +1,249 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasicprogressbar_p.h"
+
+#include <QtCore/qeasingcurve.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int Blocks = 4;
+static const int BlockWidth = 16;
+static const int BlockRestingSpacing = 4;
+static const int BlockMovingSpacing = 48;
+static const int BlockSpan = Blocks * (BlockWidth + BlockRestingSpacing) - BlockRestingSpacing;
+static const int TotalDuration = 4000;
+static const int SecondPhaseStart = TotalDuration * 0.4;
+static const int ThirdPhaseStart = TotalDuration * 0.6;
+
+static inline qreal blockStartX(int blockIndex)
+{
+ return ((blockIndex + 1) * -BlockWidth) - (blockIndex * BlockMovingSpacing);
+}
+
+static inline qreal blockRestX(int blockIndex, qreal availableWidth)
+{
+ const qreal spanRightEdgePos = availableWidth / 2 + BlockSpan / 2.0;
+ return spanRightEdgePos - (blockIndex + 1) * BlockWidth - (blockIndex * BlockRestingSpacing);
+}
+
+static inline qreal blockEndX(int blockIndex, qreal availableWidth)
+{
+ return availableWidth - blockStartX(Blocks - 1 - blockIndex) - BlockWidth;
+}
+
+class QQuickBasicProgressBarNode : public QQuickAnimatedNode
+{
+public:
+ QQuickBasicProgressBarNode(QQuickBasicProgressBar *item);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ bool m_indeterminate = false;
+ qreal m_pixelsPerSecond = 0;
+};
+
+QQuickBasicProgressBarNode::QQuickBasicProgressBarNode(QQuickBasicProgressBar *item)
+ : QQuickAnimatedNode(item),
+ m_pixelsPerSecond(item->width())
+{
+ setLoopCount(Infinite);
+ setDuration(TotalDuration);
+}
+
+void QQuickBasicProgressBarNode::updateCurrentTime(int time)
+{
+ QSGTransformNode *transformNode = static_cast<QSGTransformNode*>(firstChild());
+ for (int i = 0; i < Blocks; ++i) {
+ Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
+
+ QMatrix4x4 m;
+ const qreal restX = blockRestX(i, m_pixelsPerSecond);
+ const qreal timeInSeconds = time / 1000.0;
+
+ if (time < SecondPhaseStart) {
+ // Move into the resting position for the first phase.
+ QEasingCurve easingCurve(QEasingCurve::InQuad);
+ const qreal easedCompletion = easingCurve.valueForProgress(time / qreal(SecondPhaseStart));
+ const qreal distance = m_pixelsPerSecond * (easedCompletion * (SecondPhaseStart / 1000.0));
+ const qreal position = blockStartX(i) + distance;
+ const qreal destination = restX;
+ m.translate(qMin(position, destination), 0);
+ } else if (time < ThirdPhaseStart) {
+ // Stay in the same position for the second phase.
+ m.translate(restX, 0);
+ } else {
+ // Move out of view for the third phase.
+ const int thirdPhaseSubKickoff = (BlockMovingSpacing / m_pixelsPerSecond) * 1000;
+ const int subphase = (time - ThirdPhaseStart) / thirdPhaseSubKickoff;
+ // If we're not at this subphase yet, don't try to animate movement,
+ // because it will be incorrect.
+ if (subphase < i)
+ return;
+
+ const qreal timeSinceSecondPhase = timeInSeconds - (ThirdPhaseStart / 1000.0);
+ // We only want to start keeping track of time once our subphase has started,
+ // otherwise we move too much because we account for time that has already elapsed.
+ // For example, if we were 60 milliseconds into the third subphase:
+ //
+ // 0 ..... 1 ..... 2 ...
+ // 100 100 60
+ //
+ // i == 0, timeSinceOurKickoff == 260
+ // i == 1, timeSinceOurKickoff == 160
+ // i == 2, timeSinceOurKickoff == 60
+ const qreal timeSinceOurKickoff = timeSinceSecondPhase - (thirdPhaseSubKickoff / 1000.0 * i);
+ const qreal position = restX + (m_pixelsPerSecond * (timeSinceOurKickoff));
+ const qreal destination = blockEndX(i, m_pixelsPerSecond);
+ m.translate(qMin(position, destination), 0);
+ }
+
+ transformNode->setMatrix(m);
+
+ transformNode = static_cast<QSGTransformNode*>(transformNode->nextSibling());
+ }
+}
+
+void QQuickBasicProgressBarNode::sync(QQuickItem *item)
+{
+ QQuickBasicProgressBar *bar = static_cast<QQuickBasicProgressBar *>(item);
+ if (m_indeterminate != bar->isIndeterminate()) {
+ m_indeterminate = bar->isIndeterminate();
+ if (m_indeterminate)
+ start();
+ else
+ stop();
+ }
+ m_pixelsPerSecond = item->width();
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+
+ QMatrix4x4 m;
+ m.translate(0, (item->height() - item->implicitHeight()) / 2);
+ setMatrix(m);
+
+ if (m_indeterminate) {
+ if (childCount() != Blocks) {
+ // This was previously a regular progress bar; remove the old nodes.
+ removeAllChildNodes();
+ }
+
+ QSGTransformNode *transformNode = static_cast<QSGTransformNode*>(firstChild());
+ for (int i = 0; i < Blocks; ++i) {
+ if (!transformNode) {
+ transformNode = new QSGTransformNode;
+ appendChildNode(transformNode);
+ }
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode*>(transformNode->firstChild());
+ if (!rectNode) {
+ rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setColor(bar->color());
+ transformNode->appendChildNode(rectNode);
+ }
+
+ QMatrix4x4 m;
+ m.translate(blockStartX(i), 0);
+ transformNode->setMatrix(m);
+
+ rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(BlockWidth, item->implicitHeight())));
+ rectNode->update();
+
+ transformNode = static_cast<QSGTransformNode *>(transformNode->nextSibling());
+ }
+ } else {
+ if (childCount() > 1) {
+ // This was previously an indeterminate progress bar; remove the old nodes.
+ removeAllChildNodes();
+ }
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(firstChild());
+ if (!rectNode) {
+ rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setColor(bar->color());
+ appendChildNode(rectNode);
+ }
+
+ rectNode->setRect(QRectF(QPointF(0, 0), QSizeF(bar->progress() * item->width(), item->implicitHeight())));
+ rectNode->update();
+ }
+}
+
+QQuickBasicProgressBar::QQuickBasicProgressBar(QQuickItem *parent) :
+ QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+qreal QQuickBasicProgressBar::progress() const
+{
+ return m_progress;
+}
+
+void QQuickBasicProgressBar::setProgress(qreal progress)
+{
+ if (progress == m_progress)
+ return;
+
+ m_progress = progress;
+ update();
+}
+
+bool QQuickBasicProgressBar::isIndeterminate() const
+{
+ return m_indeterminate;
+}
+
+void QQuickBasicProgressBar::setIndeterminate(bool indeterminate)
+{
+ if (indeterminate == m_indeterminate)
+ return;
+
+ m_indeterminate = indeterminate;
+ setClip(m_indeterminate);
+ update();
+}
+
+QColor QQuickBasicProgressBar::color() const
+{
+ return m_color;
+}
+
+void QQuickBasicProgressBar::setColor(const QColor &color)
+{
+ if (color == m_color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+void QQuickBasicProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ if (change == ItemVisibleHasChanged)
+ update();
+}
+
+QSGNode *QQuickBasicProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
+{
+ QQuickBasicProgressBarNode *node = static_cast<QQuickBasicProgressBarNode *>(oldNode);
+ if (isVisible() && width() > 0 && height() > 0) {
+ if (!node)
+ node = new QQuickBasicProgressBarNode(this);
+ node->sync(this);
+ } else {
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickbasicprogressbar_p.cpp"
diff --git a/src/quickcontrols/basic/impl/qquickbasicprogressbar_p.h b/src/quickcontrols/basic/impl/qquickbasicprogressbar_p.h
new file mode 100644
index 0000000000..72b5521263
--- /dev/null
+++ b/src/quickcontrols/basic/impl/qquickbasicprogressbar_p.h
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKDEFAULTPROGRESSBAR_P_H
+#define QQUICKDEFAULTPROGRESSBAR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickitem.h>
+#include <QtGui/qcolor.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickBasicProgressBar : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL)
+ Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ QML_NAMED_ELEMENT(ProgressBarImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickBasicProgressBar(QQuickItem *parent = nullptr);
+
+ bool isIndeterminate() const;
+ void setIndeterminate(bool indeterminate);
+
+ qreal progress() const;
+ void setProgress(qreal progress);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ qreal m_progress = 0;
+ bool m_indeterminate = false;
+ QColor m_color;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickBasicProgressBar)
+
+#endif // QQUICKDEFAULTPROGRESSBAR_P_H
diff --git a/src/quickcontrols/basic/qquickbasicstyle.cpp b/src/quickcontrols/basic/qquickbasicstyle.cpp
new file mode 100644
index 0000000000..7602cc7340
--- /dev/null
+++ b/src/quickcontrols/basic/qquickbasicstyle.cpp
@@ -0,0 +1,215 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasicstyle_p.h"
+
+QT_BEGIN_NAMESPACE
+
+QQuickBasicStyle::QQuickBasicStyle(QObject *parent) :
+ QObject(parent)
+{
+}
+
+QColor QQuickBasicStyle::backgroundColor() const
+{
+ return QColor::fromRgba(0xFFFFFFFF);
+}
+
+QColor QQuickBasicStyle::overlayModalColor() const
+{
+ return QColor::fromRgba(0x7F28282A);
+}
+
+QColor QQuickBasicStyle::overlayDimColor() const
+{
+ return QColor::fromRgba(0x1F28282A);
+}
+
+QColor QQuickBasicStyle::textColor() const
+{
+ return QColor::fromRgba(0xFF353637);
+}
+
+QColor QQuickBasicStyle::textDarkColor() const
+{
+ return QColor::fromRgba(0xFF26282A);
+}
+
+QColor QQuickBasicStyle::textLightColor() const
+{
+ return QColor::fromRgba(0xFFFFFFFF);
+}
+
+QColor QQuickBasicStyle::textLinkColor() const
+{
+ return QColor::fromRgba(0xFF45A7D7);
+}
+
+QColor QQuickBasicStyle::textSelectionColor() const
+{
+ return QColor::fromRgba(0xFFFDDD5C);
+}
+
+QColor QQuickBasicStyle::textDisabledColor() const
+{
+ return QColor::fromRgba(0xFFBDBEBF);
+}
+
+QColor QQuickBasicStyle::textDisabledLightColor() const
+{
+ return QColor::fromRgba(0xFFC2C2C2);
+}
+
+QColor QQuickBasicStyle::textPlaceholderColor() const
+{
+ return QColor::fromRgba(0xFF777777);
+}
+
+QColor QQuickBasicStyle::focusColor() const
+{
+ return QColor::fromRgba(0xFF0066FF);
+}
+
+QColor QQuickBasicStyle::focusLightColor() const
+{
+ return QColor::fromRgba(0xFFF0F6FF);
+}
+
+QColor QQuickBasicStyle::focusPressedColor() const
+{
+ return QColor::fromRgba(0xFFCCE0FF);
+}
+
+QColor QQuickBasicStyle::buttonColor() const
+{
+ return QColor::fromRgba(0xFFE0E0E0);
+}
+
+QColor QQuickBasicStyle::buttonPressedColor() const
+{
+ return QColor::fromRgba(0xFFD0D0D0);
+}
+
+QColor QQuickBasicStyle::buttonCheckedColor() const
+{
+ return QColor::fromRgba(0xFF353637);
+}
+
+QColor QQuickBasicStyle::buttonCheckedPressedColor() const
+{
+ return QColor::fromRgba(0xFF585A5C);
+}
+
+QColor QQuickBasicStyle::buttonCheckedFocusColor() const
+{
+ return QColor::fromRgba(0xFF599BFF);
+}
+
+QColor QQuickBasicStyle::toolButtonColor() const
+{
+ return QColor::fromRgba(0x33333333);
+}
+
+QColor QQuickBasicStyle::tabButtonColor() const
+{
+ return QColor::fromRgba(0xFF353637);
+}
+
+QColor QQuickBasicStyle::tabButtonPressedColor() const
+{
+ return QColor::fromRgba(0xFF585A5C);
+}
+
+QColor QQuickBasicStyle::tabButtonCheckedPressedColor() const
+{
+ return QColor::fromRgba(0xFFE4E4E4);
+}
+
+QColor QQuickBasicStyle::delegateColor() const
+{
+ return QColor::fromRgba(0xFFEEEEEE);
+}
+
+QColor QQuickBasicStyle::delegatePressedColor() const
+{
+ return QColor::fromRgba(0xFFBDBEBF);
+}
+
+QColor QQuickBasicStyle::delegateFocusColor() const
+{
+ return QColor::fromRgba(0xFFE5EFFF);
+}
+
+QColor QQuickBasicStyle::indicatorPressedColor() const
+{
+ return QColor::fromRgba(0xFFF6F6F6);
+}
+
+QColor QQuickBasicStyle::indicatorDisabledColor() const
+{
+ return QColor::fromRgba(0xFFFDFDFD);
+}
+
+QColor QQuickBasicStyle::indicatorFrameColor() const
+{
+ return QColor::fromRgba(0xFF909090);
+}
+
+QColor QQuickBasicStyle::indicatorFramePressedColor() const
+{
+ return QColor::fromRgba(0xFF808080);
+}
+
+QColor QQuickBasicStyle::indicatorFrameDisabledColor() const
+{
+ return QColor::fromRgba(0xFFD6D6D6);
+}
+
+QColor QQuickBasicStyle::frameDarkColor() const
+{
+ return QColor::fromRgba(0xFF353637);
+}
+
+QColor QQuickBasicStyle::frameLightColor() const
+{
+ return QColor::fromRgba(0xFFBDBEBF);
+}
+
+QColor QQuickBasicStyle::scrollBarColor() const
+{
+ return QColor::fromRgba(0xFFBDBEBF);
+}
+
+QColor QQuickBasicStyle::scrollBarPressedColor() const
+{
+ return QColor::fromRgba(0xFF28282A);
+}
+
+QColor QQuickBasicStyle::progressBarColor() const
+{
+ return QColor::fromRgba(0xFFE4E4E4);
+}
+
+QColor QQuickBasicStyle::pageIndicatorColor() const
+{
+ return QColor::fromRgba(0xFF28282A);
+}
+
+QColor QQuickBasicStyle::separatorColor() const
+{
+ return QColor::fromRgba(0xFFCCCCCC);
+}
+
+QColor QQuickBasicStyle::disabledDarkColor() const
+{
+ return QColor::fromRgba(0xFF353637);
+}
+
+QColor QQuickBasicStyle::disabledLightColor() const
+{
+ return QColor::fromRgba(0xFFBDBEBF);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickbasicstyle_p.cpp"
diff --git a/src/quickcontrols/basic/qquickbasicstyle_p.h b/src/quickcontrols/basic/qquickbasicstyle_p.h
new file mode 100644
index 0000000000..f543d27e47
--- /dev/null
+++ b/src/quickcontrols/basic/qquickbasicstyle_p.h
@@ -0,0 +1,119 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKBASICSTYLE_P_H
+#define QQUICKBASICSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include <QtGui/qcolor.h>
+#include <QtQml/qqml.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickBasicStyle : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor CONSTANT FINAL)
+ Q_PROPERTY(QColor overlayModalColor READ overlayModalColor CONSTANT FINAL)
+ Q_PROPERTY(QColor overlayDimColor READ overlayDimColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textColor READ textColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textDarkColor READ textDarkColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textLightColor READ textLightColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textLinkColor READ textLinkColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textSelectionColor READ textSelectionColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textDisabledColor READ textDisabledColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textDisabledLightColor READ textDisabledLightColor CONSTANT FINAL)
+ Q_PROPERTY(QColor textPlaceholderColor READ textPlaceholderColor CONSTANT FINAL)
+ Q_PROPERTY(QColor focusColor READ focusColor CONSTANT FINAL)
+ Q_PROPERTY(QColor focusLightColor READ focusLightColor CONSTANT FINAL)
+ Q_PROPERTY(QColor focusPressedColor READ focusPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor buttonColor READ buttonColor CONSTANT FINAL)
+ Q_PROPERTY(QColor buttonPressedColor READ buttonPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor buttonCheckedColor READ buttonCheckedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor buttonCheckedPressedColor READ buttonCheckedPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor buttonCheckedFocusColor READ buttonCheckedFocusColor CONSTANT FINAL)
+ Q_PROPERTY(QColor toolButtonColor READ toolButtonColor CONSTANT FINAL)
+ Q_PROPERTY(QColor tabButtonColor READ tabButtonColor CONSTANT FINAL)
+ Q_PROPERTY(QColor tabButtonPressedColor READ tabButtonPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor tabButtonCheckedPressedColor READ tabButtonCheckedPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor delegateColor READ delegateColor CONSTANT FINAL)
+ Q_PROPERTY(QColor delegatePressedColor READ delegatePressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor delegateFocusColor READ delegateFocusColor CONSTANT FINAL)
+ Q_PROPERTY(QColor indicatorPressedColor READ indicatorPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor indicatorDisabledColor READ indicatorDisabledColor CONSTANT FINAL)
+ Q_PROPERTY(QColor indicatorFrameColor READ indicatorFrameColor CONSTANT FINAL)
+ Q_PROPERTY(QColor indicatorFramePressedColor READ indicatorFramePressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor indicatorFrameDisabledColor READ indicatorFrameDisabledColor CONSTANT FINAL)
+ Q_PROPERTY(QColor frameDarkColor READ frameDarkColor CONSTANT FINAL)
+ Q_PROPERTY(QColor frameLightColor READ frameLightColor CONSTANT FINAL)
+ Q_PROPERTY(QColor scrollBarColor READ scrollBarColor CONSTANT FINAL)
+ Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor CONSTANT FINAL)
+ Q_PROPERTY(QColor progressBarColor READ progressBarColor CONSTANT FINAL)
+ Q_PROPERTY(QColor pageIndicatorColor READ pageIndicatorColor CONSTANT FINAL)
+ Q_PROPERTY(QColor separatorColor READ separatorColor CONSTANT FINAL)
+ Q_PROPERTY(QColor disabledDarkColor READ disabledDarkColor CONSTANT FINAL)
+ Q_PROPERTY(QColor disabledLightColor READ disabledLightColor CONSTANT FINAL)
+ QML_NAMED_ELEMENT(Basic)
+ QML_SINGLETON
+ QML_ADDED_IN_VERSION(2, 1)
+
+public:
+ explicit QQuickBasicStyle(QObject *parent = nullptr);
+
+ QColor backgroundColor() const;
+ QColor overlayModalColor() const;
+ QColor overlayDimColor() const;
+ QColor textColor() const;
+ QColor textDarkColor() const;
+ QColor textLightColor() const;
+ QColor textLinkColor() const;
+ QColor textSelectionColor() const;
+ QColor textDisabledColor() const;
+ QColor textDisabledLightColor() const;
+ QColor textPlaceholderColor() const;
+ QColor focusColor() const;
+ QColor focusLightColor() const;
+ QColor focusPressedColor() const;
+ QColor buttonColor() const;
+ QColor buttonPressedColor() const;
+ QColor buttonCheckedColor() const;
+ QColor buttonCheckedPressedColor() const;
+ QColor buttonCheckedFocusColor() const;
+ QColor toolButtonColor() const;
+ QColor tabButtonColor() const;
+ QColor tabButtonPressedColor() const;
+ QColor tabButtonCheckedPressedColor() const;
+ QColor delegateColor() const;
+ QColor delegatePressedColor() const;
+ QColor delegateFocusColor() const;
+ QColor indicatorPressedColor() const;
+ QColor indicatorDisabledColor() const;
+ QColor indicatorFrameColor() const;
+ QColor indicatorFramePressedColor() const;
+ QColor indicatorFrameDisabledColor() const;
+ QColor frameDarkColor() const;
+ QColor frameLightColor() const;
+ QColor scrollBarColor() const;
+ QColor scrollBarPressedColor() const;
+ QColor progressBarColor() const;
+ QColor pageIndicatorColor() const;
+ QColor separatorColor() const;
+ QColor disabledDarkColor() const;
+ QColor disabledLightColor() const;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKBASICSTYLE_P_H
diff --git a/src/quickcontrols/basic/qquickbasictheme.cpp b/src/quickcontrols/basic/qquickbasictheme.cpp
new file mode 100644
index 0000000000..7884ad102e
--- /dev/null
+++ b/src/quickcontrols/basic/qquickbasictheme.cpp
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasictheme_p.h"
+
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QQuickBasicTheme::initialize(QQuickTheme *theme)
+{
+ QPalette systemPalette;
+
+ systemPalette.setColor(QPalette::Base, QColor::fromRgba(0xFFFFFFFF));
+ systemPalette.setColor(QPalette::Disabled, QPalette::Base, QColor::fromRgba(0xFFD6D6D6));
+
+ systemPalette.setColor(QPalette::Button, QColor::fromRgba(0xFFE0E0E0));
+
+ systemPalette.setColor(QPalette::ButtonText, QColor::fromRgba(0xFF26282A));
+ systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, QColor::fromRgba(0x4D26282A));
+
+ systemPalette.setColor(QPalette::BrightText, QColor::fromRgba(0xFFFFFFFF));
+ systemPalette.setColor(QPalette::Disabled, QPalette::BrightText, QColor::fromRgba(0x4DFFFFFF));
+
+ systemPalette.setColor(QPalette::Dark, QColor::fromRgba(0xFF353637));
+
+ systemPalette.setColor(QPalette::Highlight, QColor::fromRgba(0xFF0066FF));
+ systemPalette.setColor(QPalette::Disabled, QPalette::Highlight, QColor::fromRgba(0xFFF0F6FF));
+
+ systemPalette.setColor(QPalette::HighlightedText, QColor::fromRgba(0xFF090909));
+
+ systemPalette.setColor(QPalette::Light, QColor::fromRgba(0xFFF6F6F6));
+
+ systemPalette.setColor(QPalette::Link, QColor::fromRgba(0xFF45A7D7));
+
+ systemPalette.setColor(QPalette::Mid, QColor::fromRgba(0xFFBDBDBD));
+
+ systemPalette.setColor(QPalette::Midlight, QColor::fromRgba(0xFFE4E4E4));
+
+ systemPalette.setColor(QPalette::Text, QColor::fromRgba(0xFF353637));
+ systemPalette.setColor(QPalette::Disabled, QPalette::Text, QColor::fromRgba(0x7F353637));
+
+ systemPalette.setColor(QPalette::Shadow, QColor::fromRgba(0xFF28282A));
+
+ systemPalette.setColor(QPalette::ToolTipBase, QColor::fromRgba(0xFFFFFFFF));
+ systemPalette.setColor(QPalette::ToolTipText, QColor::fromRgba(0xFF000000));
+
+ systemPalette.setColor(QPalette::Window, QColor::fromRgba(0xFFFFFFFF));
+
+ systemPalette.setColor(QPalette::WindowText, QColor::fromRgba(0xFF26282A));
+ systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, QColor::fromRgba(0xFFBDBEBF));
+
+ systemPalette.setColor(QPalette::PlaceholderText, QColor::fromRgba(0x88353637));
+
+ theme->setPalette(QQuickTheme::System, systemPalette);
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/basic/qquickbasictheme_p.h b/src/quickcontrols/basic/qquickbasictheme_p.h
new file mode 100644
index 0000000000..710c57f074
--- /dev/null
+++ b/src/quickcontrols/basic/qquickbasictheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKBASICTHEME_P_H
+#define QQUICKBASICTHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickBasicTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKBASICTHEME_P_H
diff --git a/src/quickcontrols/basic/qtquickcontrols2basicstyleplugin.cpp b/src/quickcontrols/basic/qtquickcontrols2basicstyleplugin.cpp
new file mode 100644
index 0000000000..57c52fff27
--- /dev/null
+++ b/src/quickcontrols/basic/qtquickcontrols2basicstyleplugin.cpp
@@ -0,0 +1,47 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickbasicstyle_p.h"
+#include "qquickbasictheme_p.h"
+
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Basic();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Basic);
+
+class QtQuickControls2BasicStylePlugin: public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2BasicStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+
+ QQuickBasicTheme theme;
+};
+
+QtQuickControls2BasicStylePlugin::QtQuickControls2BasicStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Basic;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2BasicStylePlugin::name() const
+{
+ return QStringLiteral("Basic");
+}
+
+void QtQuickControls2BasicStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ this->theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2basicstyleplugin.moc"
diff --git a/src/quickcontrols/configure.cmake b/src/quickcontrols/configure.cmake
new file mode 100644
index 0000000000..e713e73f7c
--- /dev/null
+++ b/src/quickcontrols/configure.cmake
@@ -0,0 +1,71 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+
+
+#### Inputs
+
+
+
+#### Libraries
+
+
+
+#### Tests
+
+
+
+#### Features
+
+qt_feature("quickcontrols2-basic" PRIVATE
+ LABEL "Basic"
+)
+qt_feature("quickcontrols2-fusion" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "Fusion"
+ PURPOSE "Provides the platform agnostic desktop-oriented Fusion style."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-imagine" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "Imagine"
+ PURPOSE "Provides a style based on configurable image assets."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-material" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "Material"
+ PURPOSE "Provides a style based on the Material Design guidelines."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-universal" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "Universal"
+ PURPOSE "Provides a style based on the Universal Design guidelines."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-macos" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "macOS"
+ PURPOSE "Provides a native macOS desktop style."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-ios" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "iOS"
+ PURPOSE "Provides a native-looking iOS style."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_feature("quickcontrols2-windows" PRIVATE
+ SECTION "Quick Controls 2"
+ LABEL "Windows"
+ PURPOSE "Provides a native Windows desktop style."
+ CONDITION QT_FEATURE_quickcontrols2_basic
+)
+qt_configure_add_summary_section(NAME "Qt Quick Controls 2")
+qt_configure_add_summary_entry(
+ TYPE "featureList"
+ ARGS "quickcontrols2-basic quickcontrols2-fusion quickcontrols2-imagine quickcontrols2-ios quickcontrols2-material quickcontrols2-universal quickcontrols2-macos quickcontrols2-windows"
+ MESSAGE "Styles"
+)
+qt_configure_end_summary_section() # end of "Qt Quick Controls 2" section
diff --git a/src/quickcontrols/designer/AbstractButtonSection.qml b/src/quickcontrols/designer/AbstractButtonSection.qml
new file mode 100644
index 0000000000..c7684c20d0
--- /dev/null
+++ b/src/quickcontrols/designer/AbstractButtonSection.qml
@@ -0,0 +1,89 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("AbstractButton")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Text")
+ tooltip: qsTr("The text displayed on the button.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.text
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Display")
+ tooltip: qsTr("Determines how the icon and text are displayed within the button.")
+ disabledState: !backendValues.display.isAvailable
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.display
+ model: [ "IconOnly", "TextOnly", "TextBesideIcon" ]
+ scope: "AbstractButton"
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ visible: checkable
+ text: qsTr("Checkable")
+ tooltip: qsTr("Whether the button is checkable.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.checkable.valueToString
+ backendValue: backendValues.checkable
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Checked")
+ tooltip: qsTr("Whether the button is checked.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.checked.valueToString
+ backendValue: backendValues.checked
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Exclusive")
+ tooltip: qsTr("Whether the button is exclusive.")
+ disabledState: !backendValues.autoExclusive.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.autoExclusive.valueToString
+ backendValue: backendValues.autoExclusive
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Auto-Repeat")
+ tooltip: qsTr("Whether the button repeats pressed(), released() and clicked() signals while the button is pressed and held down.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.autoRepeat.valueToString
+ backendValue: backendValues.autoRepeat
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/BusyIndicatorSpecifics.qml b/src/quickcontrols/designer/BusyIndicatorSpecifics.qml
new file mode 100644
index 0000000000..8e0021fc71
--- /dev/null
+++ b/src/quickcontrols/designer/BusyIndicatorSpecifics.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("BusyIndicator")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Running")
+ tooltip: qsTr("Whether the busy indicator is currently indicating activity.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.running.valueToString
+ backendValue: backendValues.running
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ButtonSection.qml b/src/quickcontrols/designer/ButtonSection.qml
new file mode 100644
index 0000000000..d338bd2990
--- /dev/null
+++ b/src/quickcontrols/designer/ButtonSection.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ id: section
+ caption: qsTr("Button")
+
+ SectionLayout {
+
+ Label {
+ text: qsTr("Flat")
+ tooltip: qsTr("Whether the button is flat.")
+ disabledState: !backendValues.flat.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.flat.valueToString
+ backendValue: backendValues.flat
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+ Label {
+ text: qsTr("Highlighted")
+ tooltip: qsTr("Whether the button is highlighted.")
+ disabledState: !backendValues.highlighted.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.highlighted.valueToString
+ backendValue: backendValues.highlighted
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ButtonSpecifics.qml b/src/quickcontrols/designer/ButtonSpecifics.qml
new file mode 100644
index 0000000000..1de3c0a3c2
--- /dev/null
+++ b/src/quickcontrols/designer/ButtonSpecifics.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ButtonSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/CMakeLists.txt b/src/quickcontrols/designer/CMakeLists.txt
new file mode 100644
index 0000000000..5576d42bd3
--- /dev/null
+++ b/src/quickcontrols/designer/CMakeLists.txt
@@ -0,0 +1,64 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+file(GLOB_RECURSE __aux_qml_glob_files
+ RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}"
+ "images/*.png"
+)
+qt_path_join(images_destination ${QT_INSTALL_DIR} "${INSTALL_QMLDIR}/QtQuick/Controls/designer/images")
+qt_copy_or_install(
+ FILES
+ ${__aux_qml_glob_files}
+ DESTINATION "${images_destination}"
+)
+qt_path_join(destination ${QT_INSTALL_DIR} "${INSTALL_QMLDIR}/QtQuick/Controls/designer")
+qt_copy_or_install(
+ FILES
+ AbstractButtonSection.qml
+ BusyIndicatorSpecifics.qml
+ ButtonSection.qml
+ ButtonSpecifics.qml
+ CheckBoxSpecifics.qml
+ CheckDelegateSpecifics.qml
+ CheckSection.qml
+ ComboBoxSpecifics.qml
+ ContainerSection.qml
+ ControlSection.qml
+ ControlSpecifics.qml
+ DelayButtonSpecifics.qml
+ DialSpecifics.qml
+ FrameSpecifics.qml
+ GroupBoxSpecifics.qml
+ InsetSection.qml
+ ItemDelegateSection.qml
+ ItemDelegateSpecifics.qml
+ LabelSpecifics.qml
+ PaddingSection.qml
+ PageIndicatorSpecifics.qml
+ PageSpecifics.qml
+ PaneSection.qml
+ PaneSpecifics.qml
+ ProgressBarSpecifics.qml
+ RadioButtonSpecifics.qml
+ RadioDelegateSpecifics.qml
+ RangeSliderSpecifics.qml
+ RoundButtonSpecifics.qml
+ ScrollViewSpecifics.qml
+ SliderSpecifics.qml
+ SpinBoxSpecifics.qml
+ StackViewSpecifics.qml
+ SwipeDelegateSpecifics.qml
+ SwipeViewSpecifics.qml
+ SwitchDelegateSpecifics.qml
+ SwitchSpecifics.qml
+ TabBarSpecifics.qml
+ TabButtonSpecifics.qml
+ TextAreaSpecifics.qml
+ TextFieldSpecifics.qml
+ ToolBarSpecifics.qml
+ ToolButtonSpecifics.qml
+ ToolSeparatorSpecifics.qml
+ TumblerSpecifics.qml
+ qtquickcontrols2.metainfo
+ DESTINATION "${destination}"
+)
diff --git a/src/quickcontrols/designer/CheckBoxSpecifics.qml b/src/quickcontrols/designer/CheckBoxSpecifics.qml
new file mode 100644
index 0000000000..497a66858f
--- /dev/null
+++ b/src/quickcontrols/designer/CheckBoxSpecifics.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ CheckSection {
+ width: parent.width
+ caption: qsTr("CheckBox")
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/CheckDelegateSpecifics.qml b/src/quickcontrols/designer/CheckDelegateSpecifics.qml
new file mode 100644
index 0000000000..2f959b86f5
--- /dev/null
+++ b/src/quickcontrols/designer/CheckDelegateSpecifics.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ CheckSection {
+ width: parent.width
+ caption: qsTr("CheckDelegate")
+ }
+
+ ItemDelegateSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/CheckSection.qml b/src/quickcontrols/designer/CheckSection.qml
new file mode 100644
index 0000000000..b58d6a27ce
--- /dev/null
+++ b/src/quickcontrols/designer/CheckSection.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ SectionLayout {
+ Label {
+ text: qsTr("Check State")
+ tooltip: qsTr("The current check state.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.checkState
+ model: [ "Unchecked", "PartiallyChecked", "Checked" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Tri-state")
+ tooltip: qsTr("Whether the checkbox has three states.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.tristate.valueToString
+ backendValue: backendValues.tristate
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ComboBoxSpecifics.qml b/src/quickcontrols/designer/ComboBoxSpecifics.qml
new file mode 100644
index 0000000000..9700bc5fd9
--- /dev/null
+++ b/src/quickcontrols/designer/ComboBoxSpecifics.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("ComboBox")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Text Role")
+ tooltip: qsTr("The model role used for displaying text.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.textRole
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Current")
+ tooltip: qsTr("The index of the current item.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.currentIndex
+ Layout.fillWidth: true
+ }
+ }
+ Label {
+ text: qsTr("Editable")
+ tooltip: qsTr("Whether the combo box is editable.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.editable.valueToString
+ backendValue: backendValues.editable
+ Layout.fillWidth: true
+ }
+ }
+ Label {
+ text: qsTr("Flat")
+ tooltip: qsTr("Whether the combo box button is flat.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.flat.valueToString
+ backendValue: backendValues.flat
+ Layout.fillWidth: true
+ }
+ }
+ Label {
+ text: qsTr("DisplayText")
+ tooltip: qsTr("Holds the text that is displayed on the combo box button.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.displayText
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ContainerSection.qml b/src/quickcontrols/designer/ContainerSection.qml
new file mode 100644
index 0000000000..93618cb5bf
--- /dev/null
+++ b/src/quickcontrols/designer/ContainerSection.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("Container")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Current")
+ tooltip: qsTr("The index of the current item.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.currentIndex
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ControlSection.qml b/src/quickcontrols/designer/ControlSection.qml
new file mode 100644
index 0000000000..c7f6283ea7
--- /dev/null
+++ b/src/quickcontrols/designer/ControlSection.qml
@@ -0,0 +1,81 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("Control")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Enabled")
+ tooltip: qsTr("Whether the control is enabled.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.enabled.valueToString
+ backendValue: backendValues.enabled
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Focus Policy")
+ tooltip: qsTr("Focus policy of the control.")
+ disabledState: !backendValues.focusPolicy.isAvailable
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.focusPolicy
+ model: [ "TabFocus", "ClickFocus", "StrongFocus", "WheelFocus", "NoFocus" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Hover")
+ tooltip: qsTr("Whether control accepts hover events.")
+ disabledState: !backendValues.hoverEnabled.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.hoverEnabled.valueToString
+ backendValue: backendValues.hoverEnabled
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Spacing")
+ tooltip: qsTr("Spacing between internal elements of the control.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.spacing
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Wheel")
+ tooltip: qsTr("Whether control accepts wheel events.")
+ disabledState: !backendValues.wheelEnabled.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.wheelEnabled.valueToString
+ backendValue: backendValues.wheelEnabled
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ControlSpecifics.qml b/src/quickcontrols/designer/ControlSpecifics.qml
new file mode 100644
index 0000000000..c7c34a4ae1
--- /dev/null
+++ b/src/quickcontrols/designer/ControlSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/DelayButtonSpecifics.qml b/src/quickcontrols/designer/DelayButtonSpecifics.qml
new file mode 100644
index 0000000000..309075d2b7
--- /dev/null
+++ b/src/quickcontrols/designer/DelayButtonSpecifics.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("DelayButton")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Delay")
+ tooltip: qsTr("The delay in milliseconds.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 9999999
+ decimals: 0
+ stepSize: 1
+ backendValue: backendValues.delay
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/DialSpecifics.qml b/src/quickcontrols/designer/DialSpecifics.qml
new file mode 100644
index 0000000000..c0fd3df2ed
--- /dev/null
+++ b/src/quickcontrols/designer/DialSpecifics.qml
@@ -0,0 +1,139 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Dial")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Value")
+ tooltip: qsTr("The current value of the dial.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("From")
+ tooltip: qsTr("The starting value of the dial range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.from
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("To")
+ tooltip: qsTr("The ending value of the dial range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.to
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Step Size")
+ tooltip: qsTr("The step size of the dial.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.stepSize
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Snap Mode")
+ tooltip: qsTr("The snap mode of the dial.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.snapMode
+ model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ]
+ scope: "Dial"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Live")
+ tooltip: qsTr("Whether the dial provides live value updates.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.live.valueToString
+ backendValue: backendValues.live
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Input Mode")
+ tooltip: qsTr("How the dial tracks movement.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.inputMode
+ model: [ "Circular", "Horizontal", "Vertical" ]
+ scope: "Dial"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Wrap")
+ tooltip: qsTr("Whether the dial wraps when dragged.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.wrap.valueToString
+ backendValue: backendValues.wrap
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/FrameSpecifics.qml b/src/quickcontrols/designer/FrameSpecifics.qml
new file mode 100644
index 0000000000..a7a0acaf4a
--- /dev/null
+++ b/src/quickcontrols/designer/FrameSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ PaneSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/GroupBoxSpecifics.qml b/src/quickcontrols/designer/GroupBoxSpecifics.qml
new file mode 100644
index 0000000000..29f826efff
--- /dev/null
+++ b/src/quickcontrols/designer/GroupBoxSpecifics.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("GroupBox")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Title")
+ tooltip: qsTr("The title of the group box.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.title
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ PaneSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/InsetSection.qml b/src/quickcontrols/designer/InsetSection.qml
new file mode 100644
index 0000000000..125cc011ef
--- /dev/null
+++ b/src/quickcontrols/designer/InsetSection.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("Inset")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Vertical")
+ }
+ SecondColumnLayout {
+ Label {
+ text: qsTr("Top")
+ tooltip: qsTr("Top inset for the background.")
+ width: 42
+ }
+ SpinBox {
+ maximumValue: 10000
+ minimumValue: -10000
+ realDragRange: 5000
+ decimals: 0
+ backendValue: backendValues.topInset
+ Layout.fillWidth: true
+ }
+ Item {
+ width: 4
+ height: 4
+ }
+
+ Label {
+ text: qsTr("Bottom")
+ tooltip: qsTr("Bottom inset for the background.")
+ width: 42
+ }
+ SpinBox {
+ maximumValue: 10000
+ minimumValue: -10000
+ realDragRange: 5000
+ decimals: 0
+ backendValue: backendValues.bottomInset
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Horizontal")
+ }
+ SecondColumnLayout {
+ Label {
+ text: qsTr("Left")
+ tooltip: qsTr("Left inset for the background.")
+ width: 42
+ }
+ SpinBox {
+ maximumValue: 10000
+ minimumValue: -10000
+ realDragRange: 5000
+ decimals: 0
+ backendValue: backendValues.leftInset
+ Layout.fillWidth: true
+ }
+ Item {
+ width: 4
+ height: 4
+ }
+
+ Label {
+ text: qsTr("Right")
+ tooltip: qsTr("Right inset for the background.")
+ width: 42
+ }
+ SpinBox {
+ maximumValue: 10000
+ minimumValue: -10000
+ realDragRange: 5000
+ decimals: 0
+ backendValue: backendValues.rightInset
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ItemDelegateSection.qml b/src/quickcontrols/designer/ItemDelegateSection.qml
new file mode 100644
index 0000000000..1d6c45606a
--- /dev/null
+++ b/src/quickcontrols/designer/ItemDelegateSection.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ id: section
+ caption: qsTr("ItemDelegate")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Highlighted")
+ tooltip: qsTr("Whether the delegate is highlighted.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.highlighted.valueToString
+ backendValue: backendValues.highlighted
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/ItemDelegateSpecifics.qml b/src/quickcontrols/designer/ItemDelegateSpecifics.qml
new file mode 100644
index 0000000000..e80bc01528
--- /dev/null
+++ b/src/quickcontrols/designer/ItemDelegateSpecifics.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ItemDelegateSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/LabelSpecifics.qml b/src/quickcontrols/designer/LabelSpecifics.qml
new file mode 100644
index 0000000000..932922573a
--- /dev/null
+++ b/src/quickcontrols/designer/LabelSpecifics.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ StandardTextSection {
+ width: parent.width
+ showIsWrapping: true
+ showFormatProperty: true
+ showVerticalAlignment: true
+ }
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Text Color")
+
+ ColorEditor {
+ caption: qsTr("Text Color")
+ backendValue: backendValues.color
+ supportGradient: false
+ }
+ }
+
+ Section {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ caption: qsTr("Style Color")
+
+ ColorEditor {
+ caption: qsTr("Style Color")
+ backendValue: backendValues.styleColor
+ supportGradient: false
+ }
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+
+ InsetSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/PaddingSection.qml b/src/quickcontrols/designer/PaddingSection.qml
new file mode 100644
index 0000000000..d921d2878f
--- /dev/null
+++ b/src/quickcontrols/designer/PaddingSection.qml
@@ -0,0 +1,68 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("Padding")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Top")
+ tooltip: qsTr("Padding between the content and the top edge of the control.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.topPadding
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Left")
+ tooltip: qsTr("Padding between the content and the left edge of the control.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.leftPadding
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Right")
+ tooltip: qsTr("Padding between the content and the right edge of the control.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.rightPadding
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Bottom")
+ tooltip: qsTr("Padding between the content and the bottom edge of the control.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.bottomPadding
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/PageIndicatorSpecifics.qml b/src/quickcontrols/designer/PageIndicatorSpecifics.qml
new file mode 100644
index 0000000000..65d9031025
--- /dev/null
+++ b/src/quickcontrols/designer/PageIndicatorSpecifics.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("PageIndicator")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Count")
+ tooltip: qsTr("The number of pages.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.count
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Current")
+ tooltip: qsTr("The index of the current page.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.currentIndex
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Interactive")
+ tooltip: qsTr("Whether the control is interactive.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.interactive.valueToString
+ backendValue: backendValues.interactive
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/PageSpecifics.qml b/src/quickcontrols/designer/PageSpecifics.qml
new file mode 100644
index 0000000000..c4b8027b69
--- /dev/null
+++ b/src/quickcontrols/designer/PageSpecifics.qml
@@ -0,0 +1,68 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Page")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Title")
+ tooltip: qsTr("Title of the page.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.title
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Width")
+ tooltip: qsTr("Content height used for calculating the total implicit width.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentWidth
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Height")
+ tooltip: qsTr("Content height used for calculating the total implicit height.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentHeight
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/PaneSection.qml b/src/quickcontrols/designer/PaneSection.qml
new file mode 100644
index 0000000000..7710198f19
--- /dev/null
+++ b/src/quickcontrols/designer/PaneSection.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Section {
+ caption: qsTr("Pane")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Content Width")
+ tooltip: qsTr("Content height used for calculating the total implicit width.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentWidth
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Height")
+ tooltip: qsTr("Content height used for calculating the total implicit height.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentHeight
+ Layout.fillWidth: true
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/designer/PaneSpecifics.qml b/src/quickcontrols/designer/PaneSpecifics.qml
new file mode 100644
index 0000000000..a7a0acaf4a
--- /dev/null
+++ b/src/quickcontrols/designer/PaneSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ PaneSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ProgressBarSpecifics.qml b/src/quickcontrols/designer/ProgressBarSpecifics.qml
new file mode 100644
index 0000000000..9a604d4037
--- /dev/null
+++ b/src/quickcontrols/designer/ProgressBarSpecifics.qml
@@ -0,0 +1,88 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("ProgressBar")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Indeterminate")
+ tooltip: qsTr("Whether the progress is indeterminate.")
+ disabledState: !backendValues.indeterminate.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.indeterminate.valueToString
+ backendValue: backendValues.indeterminate
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Value")
+ tooltip: qsTr("The current value of the progress.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("From")
+ tooltip: qsTr("The starting value for the progress.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.from
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("To")
+ tooltip: qsTr("The ending value for the progress.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.to
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/RadioButtonSpecifics.qml b/src/quickcontrols/designer/RadioButtonSpecifics.qml
new file mode 100644
index 0000000000..ecfd4cf406
--- /dev/null
+++ b/src/quickcontrols/designer/RadioButtonSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/RadioDelegateSpecifics.qml b/src/quickcontrols/designer/RadioDelegateSpecifics.qml
new file mode 100644
index 0000000000..e80bc01528
--- /dev/null
+++ b/src/quickcontrols/designer/RadioDelegateSpecifics.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ItemDelegateSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/RangeSliderSpecifics.qml b/src/quickcontrols/designer/RangeSliderSpecifics.qml
new file mode 100644
index 0000000000..cb66eec393
--- /dev/null
+++ b/src/quickcontrols/designer/RangeSliderSpecifics.qml
@@ -0,0 +1,156 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("RangeSlider")
+
+ SectionLayout {
+ Label {
+ text: qsTr("First Value")
+ tooltip: qsTr("The value of the first range slider handle.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.first_value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Second Value")
+ tooltip: qsTr("The value of the second range slider handle.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.second_value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("From")
+ tooltip: qsTr("The starting value of the range slider range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.from
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("To")
+ tooltip: qsTr("The ending value of the range slider range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.to
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Step Size")
+ tooltip: qsTr("The step size of the range slider.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.stepSize
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Snap Mode")
+ tooltip: qsTr("The snap mode of the range slider.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.snapMode
+ model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ]
+ scope: "RangeSlider"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Orientation")
+ tooltip: qsTr("The orientation of the range slider.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.orientation
+ model: [ "Horizontal", "Vertical" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Live")
+ tooltip: qsTr("Whether the range slider provides live value updates.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.live.valueToString
+ backendValue: backendValues.live
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Touch drag threshold")
+ tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 10000
+ decimals: 0
+ backendValue: backendValues.touchDragThreshold
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/RoundButtonSpecifics.qml b/src/quickcontrols/designer/RoundButtonSpecifics.qml
new file mode 100644
index 0000000000..45c617bc94
--- /dev/null
+++ b/src/quickcontrols/designer/RoundButtonSpecifics.qml
@@ -0,0 +1,51 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("RoundButton")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Radius")
+ tooltip: qsTr("Radius of the button.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 10000
+ decimals: 0
+ backendValue: backendValues.radius
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ButtonSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ScrollViewSpecifics.qml b/src/quickcontrols/designer/ScrollViewSpecifics.qml
new file mode 100644
index 0000000000..c2623a0966
--- /dev/null
+++ b/src/quickcontrols/designer/ScrollViewSpecifics.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("ScrollView")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Content Width")
+ tooltip: qsTr("Content height used for calculating the total implicit width.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentWidth
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Height")
+ tooltip: qsTr("Content height used for calculating the total implicit height.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentHeight
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SliderSpecifics.qml b/src/quickcontrols/designer/SliderSpecifics.qml
new file mode 100644
index 0000000000..a2fada6f52
--- /dev/null
+++ b/src/quickcontrols/designer/SliderSpecifics.qml
@@ -0,0 +1,147 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Slider")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Value")
+ tooltip: qsTr("The current value of the slider.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("From")
+ tooltip: qsTr("The starting value of the slider range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.from
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("To")
+ tooltip: qsTr("The ending value of the slider range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.to
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Step Size")
+ tooltip: qsTr("The step size of the slider.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ stepSize: 0.1
+ backendValue: backendValues.stepSize
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Snap Mode")
+ tooltip: qsTr("The snap mode of the slider.")
+ disabledState: !backendValues.snapMode.isAvailable
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.snapMode
+ model: [ "NoSnap", "SnapOnRelease", "SnapAlways" ]
+ scope: "Slider"
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Orientation")
+ tooltip: qsTr("The orientation of the slider.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.orientation
+ model: [ "Horizontal", "Vertical" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Live")
+ tooltip: qsTr("Whether the slider provides live value updates.")
+ disabledState: !backendValues.live.isAvailable
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.live.valueToString
+ backendValue: backendValues.live
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+
+ Label {
+ text: qsTr("Touch drag threshold")
+ tooltip: qsTr("The threshold (in logical pixels) at which a touch drag event will be initiated.")
+ disabledState: !backendValues.touchDragThreshold.isAvailable
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: 0
+ maximumValue: 10000
+ decimals: 0
+ backendValue: backendValues.touchDragThreshold
+ Layout.fillWidth: true
+ enabled: backendValue.isAvailable
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SpinBoxSpecifics.qml b/src/quickcontrols/designer/SpinBoxSpecifics.qml
new file mode 100644
index 0000000000..6bd28bb880
--- /dev/null
+++ b/src/quickcontrols/designer/SpinBoxSpecifics.qml
@@ -0,0 +1,109 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("SpinBox")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Value")
+ tooltip: qsTr("The current value of the spinbox.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ minimumValue: Math.min(backendValues.from.value, backendValues.to.value)
+ maximumValue: Math.max(backendValues.from.value, backendValues.to.value)
+ decimals: 2
+ backendValue: backendValues.value
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("From")
+ tooltip: qsTr("The starting value of the spinbox range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.from
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("To")
+ tooltip: qsTr("The ending value of the spinbox range.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.to
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Step Size")
+ tooltip: qsTr("The step size of the spinbox.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 2
+ backendValue: backendValues.stepSize
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Editable")
+ tooltip: qsTr("Whether the spinbox is editable.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.editable.valueToString
+ backendValue: backendValues.editable
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Wrap")
+ tooltip: qsTr("Whether the spinbox wraps.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.wrap.valueToString
+ backendValue: backendValues.wrap
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/StackViewSpecifics.qml b/src/quickcontrols/designer/StackViewSpecifics.qml
new file mode 100644
index 0000000000..c7c34a4ae1
--- /dev/null
+++ b/src/quickcontrols/designer/StackViewSpecifics.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SwipeDelegateSpecifics.qml b/src/quickcontrols/designer/SwipeDelegateSpecifics.qml
new file mode 100644
index 0000000000..e80bc01528
--- /dev/null
+++ b/src/quickcontrols/designer/SwipeDelegateSpecifics.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ItemDelegateSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SwipeViewSpecifics.qml b/src/quickcontrols/designer/SwipeViewSpecifics.qml
new file mode 100644
index 0000000000..70882e2832
--- /dev/null
+++ b/src/quickcontrols/designer/SwipeViewSpecifics.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("SwipeView")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Interactive")
+ tooltip: qsTr("Whether the view is interactive.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.interactive.valueToString
+ backendValue: backendValues.interactive
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Orientation")
+ tooltip: qsTr("Orientation of the view.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.orientation
+ model: [ "Horizontal", "Vertical" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ContainerSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SwitchDelegateSpecifics.qml b/src/quickcontrols/designer/SwitchDelegateSpecifics.qml
new file mode 100644
index 0000000000..d3d600f462
--- /dev/null
+++ b/src/quickcontrols/designer/SwitchDelegateSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ItemDelegateSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/SwitchSpecifics.qml b/src/quickcontrols/designer/SwitchSpecifics.qml
new file mode 100644
index 0000000000..ecfd4cf406
--- /dev/null
+++ b/src/quickcontrols/designer/SwitchSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/TabBarSpecifics.qml b/src/quickcontrols/designer/TabBarSpecifics.qml
new file mode 100644
index 0000000000..1a5b08e528
--- /dev/null
+++ b/src/quickcontrols/designer/TabBarSpecifics.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("TabBar")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Position")
+ tooltip: qsTr("Position of the tabbar.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.position
+ model: [ "Header", "Footer" ]
+ scope: "TabBar"
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Width")
+ tooltip: qsTr("Content height used for calculating the total implicit width.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentWidth
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Content Height")
+ tooltip: qsTr("Content height used for calculating the total implicit height.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.contentHeight
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ContainerSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/TabButtonSpecifics.qml b/src/quickcontrols/designer/TabButtonSpecifics.qml
new file mode 100644
index 0000000000..ecfd4cf406
--- /dev/null
+++ b/src/quickcontrols/designer/TabButtonSpecifics.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/TextAreaSpecifics.qml b/src/quickcontrols/designer/TextAreaSpecifics.qml
new file mode 100644
index 0000000000..faec481eb8
--- /dev/null
+++ b/src/quickcontrols/designer/TextAreaSpecifics.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("TextArea")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Placeholder")
+ tooltip: qsTr("Placeholder text displayed when the editor is empty.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.placeholderText
+ Layout.fillWidth: true
+ }
+
+ }
+
+ Label {
+ text: qsTr("Hover")
+ tooltip: qsTr("Whether text area accepts hover events.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.hoverEnabled.valueToString
+ backendValue: backendValues.hoverEnabled
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Placeholder Text Color")
+
+ ColorEditor {
+ caption: qsTr("Placeholder Text Color")
+ backendValue: backendValues.placeholderTextColor
+ supportGradient: false
+ }
+ }
+
+ StandardTextSection {
+ width: parent.width
+ showIsWrapping: true
+ showFormatProperty: true
+ showVerticalAlignment: true
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+
+ InsetSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/TextFieldSpecifics.qml b/src/quickcontrols/designer/TextFieldSpecifics.qml
new file mode 100644
index 0000000000..54dcefb3b1
--- /dev/null
+++ b/src/quickcontrols/designer/TextFieldSpecifics.qml
@@ -0,0 +1,68 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("TextField")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Placeholder")
+ tooltip: qsTr("Placeholder text displayed when the editor is empty.")
+ }
+ SecondColumnLayout {
+ LineEdit {
+ backendValue: backendValues.placeholderText
+ Layout.fillWidth: true
+ }
+
+ }
+
+ Label {
+ text: qsTr("Hover")
+ tooltip: qsTr("Whether text field accepts hover events.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.hoverEnabled.valueToString
+ backendValue: backendValues.hoverEnabled
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ Section {
+ width: parent.width
+ caption: qsTr("Placeholder Text Color")
+
+ ColorEditor {
+ caption: qsTr("Placeholder Text Color")
+ backendValue: backendValues.placeholderTextColor
+ supportGradient: false
+ }
+ }
+
+ StandardTextSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+
+ InsetSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ToolBarSpecifics.qml b/src/quickcontrols/designer/ToolBarSpecifics.qml
new file mode 100644
index 0000000000..284443c2a0
--- /dev/null
+++ b/src/quickcontrols/designer/ToolBarSpecifics.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("ToolBar")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Position")
+ tooltip: qsTr("Position of the toolbar.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.position
+ model: [ "Header", "Footer" ]
+ scope: "ToolBar"
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ PaneSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ToolButtonSpecifics.qml b/src/quickcontrols/designer/ToolButtonSpecifics.qml
new file mode 100644
index 0000000000..1de3c0a3c2
--- /dev/null
+++ b/src/quickcontrols/designer/ToolButtonSpecifics.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ ButtonSection {
+ width: parent.width
+ }
+
+ AbstractButtonSection {
+ width: parent.width
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/ToolSeparatorSpecifics.qml b/src/quickcontrols/designer/ToolSeparatorSpecifics.qml
new file mode 100644
index 0000000000..a2dfe43d18
--- /dev/null
+++ b/src/quickcontrols/designer/ToolSeparatorSpecifics.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("ToolSeparator")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Orientation")
+ tooltip: qsTr("The orientation of the separator.")
+ }
+ SecondColumnLayout {
+ ComboBox {
+ backendValue: backendValues.orientation
+ model: [ "Horizontal", "Vertical" ]
+ scope: "Qt"
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/TumblerSpecifics.qml b/src/quickcontrols/designer/TumblerSpecifics.qml
new file mode 100644
index 0000000000..4026a63d12
--- /dev/null
+++ b/src/quickcontrols/designer/TumblerSpecifics.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import HelperWidgets
+import QtQuick.Layouts
+
+Column {
+ width: parent.width
+
+ Section {
+ width: parent.width
+ caption: qsTr("Tumbler")
+
+ SectionLayout {
+ Label {
+ text: qsTr("Visible Count")
+ tooltip: qsTr("The count of visible items.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.visibleItemCount
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Current")
+ tooltip: qsTr("The index of the current item.")
+ }
+ SecondColumnLayout {
+ SpinBox {
+ maximumValue: 9999999
+ minimumValue: -9999999
+ decimals: 0
+ backendValue: backendValues.currentIndex
+ Layout.fillWidth: true
+ }
+ }
+
+ Label {
+ text: qsTr("Wrap")
+ tooltip: qsTr("Whether the tumbler wrap.")
+ }
+ SecondColumnLayout {
+ CheckBox {
+ text: backendValues.wrap.valueToString
+ backendValue: backendValues.wrap
+ Layout.fillWidth: true
+ }
+ }
+ }
+ }
+
+ ControlSection {
+ width: parent.width
+ }
+
+ FontSection {
+ width: parent.width
+ }
+
+ PaddingSection {
+ width: parent.width
+ }
+}
diff --git a/src/quickcontrols/designer/images/busyindicator-icon.png b/src/quickcontrols/designer/images/busyindicator-icon.png
new file mode 100644
index 0000000000..666d1ed93f
--- /dev/null
+++ b/src/quickcontrols/designer/images/busyindicator-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/busyindicator-icon16.png b/src/quickcontrols/designer/images/busyindicator-icon16.png
new file mode 100644
index 0000000000..5aa57d7f48
--- /dev/null
+++ b/src/quickcontrols/designer/images/busyindicator-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/busyindicator-icon@2x.png b/src/quickcontrols/designer/images/busyindicator-icon@2x.png
new file mode 100644
index 0000000000..bb2278ff89
--- /dev/null
+++ b/src/quickcontrols/designer/images/busyindicator-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/button-icon.png b/src/quickcontrols/designer/images/button-icon.png
new file mode 100644
index 0000000000..c44909f6dd
--- /dev/null
+++ b/src/quickcontrols/designer/images/button-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/button-icon16.png b/src/quickcontrols/designer/images/button-icon16.png
new file mode 100644
index 0000000000..5c921deb13
--- /dev/null
+++ b/src/quickcontrols/designer/images/button-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/button-icon@2x.png b/src/quickcontrols/designer/images/button-icon@2x.png
new file mode 100644
index 0000000000..f90a1ba7dc
--- /dev/null
+++ b/src/quickcontrols/designer/images/button-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/checkbox-icon.png b/src/quickcontrols/designer/images/checkbox-icon.png
new file mode 100644
index 0000000000..ee669b3a88
--- /dev/null
+++ b/src/quickcontrols/designer/images/checkbox-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/checkbox-icon16.png b/src/quickcontrols/designer/images/checkbox-icon16.png
new file mode 100644
index 0000000000..8d89eab841
--- /dev/null
+++ b/src/quickcontrols/designer/images/checkbox-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/checkbox-icon@2x.png b/src/quickcontrols/designer/images/checkbox-icon@2x.png
new file mode 100644
index 0000000000..51c5601de0
--- /dev/null
+++ b/src/quickcontrols/designer/images/checkbox-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/combobox-icon.png b/src/quickcontrols/designer/images/combobox-icon.png
new file mode 100644
index 0000000000..2d31b17c65
--- /dev/null
+++ b/src/quickcontrols/designer/images/combobox-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/combobox-icon16.png b/src/quickcontrols/designer/images/combobox-icon16.png
new file mode 100644
index 0000000000..15fc3505ba
--- /dev/null
+++ b/src/quickcontrols/designer/images/combobox-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/combobox-icon@2x.png b/src/quickcontrols/designer/images/combobox-icon@2x.png
new file mode 100644
index 0000000000..5f82390596
--- /dev/null
+++ b/src/quickcontrols/designer/images/combobox-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/control-icon.png b/src/quickcontrols/designer/images/control-icon.png
new file mode 100644
index 0000000000..fd9e4e8ff3
--- /dev/null
+++ b/src/quickcontrols/designer/images/control-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/control-icon16.png b/src/quickcontrols/designer/images/control-icon16.png
new file mode 100644
index 0000000000..31c765483e
--- /dev/null
+++ b/src/quickcontrols/designer/images/control-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/control-icon@2x.png b/src/quickcontrols/designer/images/control-icon@2x.png
new file mode 100644
index 0000000000..22604d2492
--- /dev/null
+++ b/src/quickcontrols/designer/images/control-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/delaybutton-icon.png b/src/quickcontrols/designer/images/delaybutton-icon.png
new file mode 100644
index 0000000000..5a55bd9f77
--- /dev/null
+++ b/src/quickcontrols/designer/images/delaybutton-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/delaybutton-icon16.png b/src/quickcontrols/designer/images/delaybutton-icon16.png
new file mode 100644
index 0000000000..cd21394e46
--- /dev/null
+++ b/src/quickcontrols/designer/images/delaybutton-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/delaybutton-icon@2x.png b/src/quickcontrols/designer/images/delaybutton-icon@2x.png
new file mode 100644
index 0000000000..7beee2fab0
--- /dev/null
+++ b/src/quickcontrols/designer/images/delaybutton-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/dial-icon.png b/src/quickcontrols/designer/images/dial-icon.png
new file mode 100644
index 0000000000..b3b63e3523
--- /dev/null
+++ b/src/quickcontrols/designer/images/dial-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/dial-icon16.png b/src/quickcontrols/designer/images/dial-icon16.png
new file mode 100644
index 0000000000..8d8c7c09b0
--- /dev/null
+++ b/src/quickcontrols/designer/images/dial-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/dial-icon@2x.png b/src/quickcontrols/designer/images/dial-icon@2x.png
new file mode 100644
index 0000000000..22547a16b8
--- /dev/null
+++ b/src/quickcontrols/designer/images/dial-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/frame-icon.png b/src/quickcontrols/designer/images/frame-icon.png
new file mode 100644
index 0000000000..32abc8bf1e
--- /dev/null
+++ b/src/quickcontrols/designer/images/frame-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/frame-icon16.png b/src/quickcontrols/designer/images/frame-icon16.png
new file mode 100644
index 0000000000..e5b65ad53b
--- /dev/null
+++ b/src/quickcontrols/designer/images/frame-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/frame-icon@2x.png b/src/quickcontrols/designer/images/frame-icon@2x.png
new file mode 100644
index 0000000000..8b876f38ec
--- /dev/null
+++ b/src/quickcontrols/designer/images/frame-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/groupbox-icon.png b/src/quickcontrols/designer/images/groupbox-icon.png
new file mode 100644
index 0000000000..5542ecf8bf
--- /dev/null
+++ b/src/quickcontrols/designer/images/groupbox-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/groupbox-icon16.png b/src/quickcontrols/designer/images/groupbox-icon16.png
new file mode 100644
index 0000000000..9cf4324819
--- /dev/null
+++ b/src/quickcontrols/designer/images/groupbox-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/groupbox-icon@2x.png b/src/quickcontrols/designer/images/groupbox-icon@2x.png
new file mode 100644
index 0000000000..80dab3c716
--- /dev/null
+++ b/src/quickcontrols/designer/images/groupbox-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/itemdelegate-icon.png b/src/quickcontrols/designer/images/itemdelegate-icon.png
new file mode 100644
index 0000000000..822cf3e7b8
--- /dev/null
+++ b/src/quickcontrols/designer/images/itemdelegate-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/itemdelegate-icon16.png b/src/quickcontrols/designer/images/itemdelegate-icon16.png
new file mode 100644
index 0000000000..b3ed007a0e
--- /dev/null
+++ b/src/quickcontrols/designer/images/itemdelegate-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/itemdelegate-icon@2x.png b/src/quickcontrols/designer/images/itemdelegate-icon@2x.png
new file mode 100644
index 0000000000..cb81308ff8
--- /dev/null
+++ b/src/quickcontrols/designer/images/itemdelegate-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/label-icon.png b/src/quickcontrols/designer/images/label-icon.png
new file mode 100644
index 0000000000..788bef078c
--- /dev/null
+++ b/src/quickcontrols/designer/images/label-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/label-icon16.png b/src/quickcontrols/designer/images/label-icon16.png
new file mode 100644
index 0000000000..b68d384568
--- /dev/null
+++ b/src/quickcontrols/designer/images/label-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/label-icon@2x.png b/src/quickcontrols/designer/images/label-icon@2x.png
new file mode 100644
index 0000000000..7001413d3b
--- /dev/null
+++ b/src/quickcontrols/designer/images/label-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/page-icon.png b/src/quickcontrols/designer/images/page-icon.png
new file mode 100644
index 0000000000..b5ac87e899
--- /dev/null
+++ b/src/quickcontrols/designer/images/page-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/page-icon16.png b/src/quickcontrols/designer/images/page-icon16.png
new file mode 100644
index 0000000000..bc6810b605
--- /dev/null
+++ b/src/quickcontrols/designer/images/page-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/page-icon@2x.png b/src/quickcontrols/designer/images/page-icon@2x.png
new file mode 100644
index 0000000000..23db032f4a
--- /dev/null
+++ b/src/quickcontrols/designer/images/page-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pageindicator-icon.png b/src/quickcontrols/designer/images/pageindicator-icon.png
new file mode 100644
index 0000000000..edb6b377bb
--- /dev/null
+++ b/src/quickcontrols/designer/images/pageindicator-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pageindicator-icon16.png b/src/quickcontrols/designer/images/pageindicator-icon16.png
new file mode 100644
index 0000000000..0fb8967564
--- /dev/null
+++ b/src/quickcontrols/designer/images/pageindicator-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pageindicator-icon@2x.png b/src/quickcontrols/designer/images/pageindicator-icon@2x.png
new file mode 100644
index 0000000000..7be0ee813b
--- /dev/null
+++ b/src/quickcontrols/designer/images/pageindicator-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pane-icon.png b/src/quickcontrols/designer/images/pane-icon.png
new file mode 100644
index 0000000000..62ebe487ff
--- /dev/null
+++ b/src/quickcontrols/designer/images/pane-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pane-icon16.png b/src/quickcontrols/designer/images/pane-icon16.png
new file mode 100644
index 0000000000..2b8048441c
--- /dev/null
+++ b/src/quickcontrols/designer/images/pane-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/pane-icon@2x.png b/src/quickcontrols/designer/images/pane-icon@2x.png
new file mode 100644
index 0000000000..55bb116a69
--- /dev/null
+++ b/src/quickcontrols/designer/images/pane-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/progressbar-icon.png b/src/quickcontrols/designer/images/progressbar-icon.png
new file mode 100644
index 0000000000..a023f73c30
--- /dev/null
+++ b/src/quickcontrols/designer/images/progressbar-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/progressbar-icon16.png b/src/quickcontrols/designer/images/progressbar-icon16.png
new file mode 100644
index 0000000000..6fede21d8c
--- /dev/null
+++ b/src/quickcontrols/designer/images/progressbar-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/progressbar-icon@2x.png b/src/quickcontrols/designer/images/progressbar-icon@2x.png
new file mode 100644
index 0000000000..0069400335
--- /dev/null
+++ b/src/quickcontrols/designer/images/progressbar-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/radiobutton-icon.png b/src/quickcontrols/designer/images/radiobutton-icon.png
new file mode 100644
index 0000000000..d38170e22f
--- /dev/null
+++ b/src/quickcontrols/designer/images/radiobutton-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/radiobutton-icon16.png b/src/quickcontrols/designer/images/radiobutton-icon16.png
new file mode 100644
index 0000000000..07b46a8ab0
--- /dev/null
+++ b/src/quickcontrols/designer/images/radiobutton-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/radiobutton-icon@2x.png b/src/quickcontrols/designer/images/radiobutton-icon@2x.png
new file mode 100644
index 0000000000..4bbddda4b2
--- /dev/null
+++ b/src/quickcontrols/designer/images/radiobutton-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/rangeslider-icon.png b/src/quickcontrols/designer/images/rangeslider-icon.png
new file mode 100644
index 0000000000..1c4c7b2948
--- /dev/null
+++ b/src/quickcontrols/designer/images/rangeslider-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/rangeslider-icon16.png b/src/quickcontrols/designer/images/rangeslider-icon16.png
new file mode 100644
index 0000000000..3be4624ddd
--- /dev/null
+++ b/src/quickcontrols/designer/images/rangeslider-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/rangeslider-icon@2x.png b/src/quickcontrols/designer/images/rangeslider-icon@2x.png
new file mode 100644
index 0000000000..aee69b3302
--- /dev/null
+++ b/src/quickcontrols/designer/images/rangeslider-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/roundbutton-icon.png b/src/quickcontrols/designer/images/roundbutton-icon.png
new file mode 100644
index 0000000000..d4b470dc25
--- /dev/null
+++ b/src/quickcontrols/designer/images/roundbutton-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/roundbutton-icon16.png b/src/quickcontrols/designer/images/roundbutton-icon16.png
new file mode 100644
index 0000000000..f6f3666639
--- /dev/null
+++ b/src/quickcontrols/designer/images/roundbutton-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/roundbutton-icon@2x.png b/src/quickcontrols/designer/images/roundbutton-icon@2x.png
new file mode 100644
index 0000000000..4553e165e7
--- /dev/null
+++ b/src/quickcontrols/designer/images/roundbutton-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/scrollview-icon.png b/src/quickcontrols/designer/images/scrollview-icon.png
new file mode 100644
index 0000000000..5ef73ff19f
--- /dev/null
+++ b/src/quickcontrols/designer/images/scrollview-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/scrollview-icon16.png b/src/quickcontrols/designer/images/scrollview-icon16.png
new file mode 100644
index 0000000000..f8ca7a3685
--- /dev/null
+++ b/src/quickcontrols/designer/images/scrollview-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/scrollview-icon@2x.png b/src/quickcontrols/designer/images/scrollview-icon@2x.png
new file mode 100644
index 0000000000..0eb7f9665e
--- /dev/null
+++ b/src/quickcontrols/designer/images/scrollview-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/slider-icon.png b/src/quickcontrols/designer/images/slider-icon.png
new file mode 100644
index 0000000000..bd0a9729be
--- /dev/null
+++ b/src/quickcontrols/designer/images/slider-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/slider-icon16.png b/src/quickcontrols/designer/images/slider-icon16.png
new file mode 100644
index 0000000000..a08622df89
--- /dev/null
+++ b/src/quickcontrols/designer/images/slider-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/slider-icon@2x.png b/src/quickcontrols/designer/images/slider-icon@2x.png
new file mode 100644
index 0000000000..93842e4cdd
--- /dev/null
+++ b/src/quickcontrols/designer/images/slider-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/spinbox-icon.png b/src/quickcontrols/designer/images/spinbox-icon.png
new file mode 100644
index 0000000000..37277c5e43
--- /dev/null
+++ b/src/quickcontrols/designer/images/spinbox-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/spinbox-icon16.png b/src/quickcontrols/designer/images/spinbox-icon16.png
new file mode 100644
index 0000000000..f88711dd25
--- /dev/null
+++ b/src/quickcontrols/designer/images/spinbox-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/spinbox-icon@2x.png b/src/quickcontrols/designer/images/spinbox-icon@2x.png
new file mode 100644
index 0000000000..b62a3bad51
--- /dev/null
+++ b/src/quickcontrols/designer/images/spinbox-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/stackview-icon.png b/src/quickcontrols/designer/images/stackview-icon.png
new file mode 100644
index 0000000000..a6ced34925
--- /dev/null
+++ b/src/quickcontrols/designer/images/stackview-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/stackview-icon16.png b/src/quickcontrols/designer/images/stackview-icon16.png
new file mode 100644
index 0000000000..0f19d0efa3
--- /dev/null
+++ b/src/quickcontrols/designer/images/stackview-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/stackview-icon@2x.png b/src/quickcontrols/designer/images/stackview-icon@2x.png
new file mode 100644
index 0000000000..9b5ef9517b
--- /dev/null
+++ b/src/quickcontrols/designer/images/stackview-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/swipeview-icon.png b/src/quickcontrols/designer/images/swipeview-icon.png
new file mode 100644
index 0000000000..031cb27c36
--- /dev/null
+++ b/src/quickcontrols/designer/images/swipeview-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/swipeview-icon16.png b/src/quickcontrols/designer/images/swipeview-icon16.png
new file mode 100644
index 0000000000..446c469690
--- /dev/null
+++ b/src/quickcontrols/designer/images/swipeview-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/swipeview-icon@2x.png b/src/quickcontrols/designer/images/swipeview-icon@2x.png
new file mode 100644
index 0000000000..0ccb978c46
--- /dev/null
+++ b/src/quickcontrols/designer/images/swipeview-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/switch-icon.png b/src/quickcontrols/designer/images/switch-icon.png
new file mode 100644
index 0000000000..e018159286
--- /dev/null
+++ b/src/quickcontrols/designer/images/switch-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/switch-icon16.png b/src/quickcontrols/designer/images/switch-icon16.png
new file mode 100644
index 0000000000..9abd275659
--- /dev/null
+++ b/src/quickcontrols/designer/images/switch-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/switch-icon@2x.png b/src/quickcontrols/designer/images/switch-icon@2x.png
new file mode 100644
index 0000000000..787f54ca41
--- /dev/null
+++ b/src/quickcontrols/designer/images/switch-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textarea-icon.png b/src/quickcontrols/designer/images/textarea-icon.png
new file mode 100644
index 0000000000..f1b2dc0f84
--- /dev/null
+++ b/src/quickcontrols/designer/images/textarea-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textarea-icon16.png b/src/quickcontrols/designer/images/textarea-icon16.png
new file mode 100644
index 0000000000..4afc1fbab5
--- /dev/null
+++ b/src/quickcontrols/designer/images/textarea-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textarea-icon@2x.png b/src/quickcontrols/designer/images/textarea-icon@2x.png
new file mode 100644
index 0000000000..c32ecc71a9
--- /dev/null
+++ b/src/quickcontrols/designer/images/textarea-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textfield-icon.png b/src/quickcontrols/designer/images/textfield-icon.png
new file mode 100644
index 0000000000..ba5537acef
--- /dev/null
+++ b/src/quickcontrols/designer/images/textfield-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textfield-icon16.png b/src/quickcontrols/designer/images/textfield-icon16.png
new file mode 100644
index 0000000000..c4a62a6582
--- /dev/null
+++ b/src/quickcontrols/designer/images/textfield-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/textfield-icon@2x.png b/src/quickcontrols/designer/images/textfield-icon@2x.png
new file mode 100644
index 0000000000..e05fd41b9a
--- /dev/null
+++ b/src/quickcontrols/designer/images/textfield-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbar-icon.png b/src/quickcontrols/designer/images/toolbar-icon.png
new file mode 100644
index 0000000000..5cb5b2e1af
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbar-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbar-icon16.png b/src/quickcontrols/designer/images/toolbar-icon16.png
new file mode 100644
index 0000000000..569373afa1
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbar-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbar-icon@2x.png b/src/quickcontrols/designer/images/toolbar-icon@2x.png
new file mode 100644
index 0000000000..fd9e6ceebc
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbar-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbutton-icon.png b/src/quickcontrols/designer/images/toolbutton-icon.png
new file mode 100644
index 0000000000..3298f69519
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbutton-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbutton-icon16.png b/src/quickcontrols/designer/images/toolbutton-icon16.png
new file mode 100644
index 0000000000..9ab7861c25
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbutton-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolbutton-icon@2x.png b/src/quickcontrols/designer/images/toolbutton-icon@2x.png
new file mode 100644
index 0000000000..e5958cded3
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolbutton-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolseparator-icon.png b/src/quickcontrols/designer/images/toolseparator-icon.png
new file mode 100644
index 0000000000..5e99f06f2e
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolseparator-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolseparator-icon16.png b/src/quickcontrols/designer/images/toolseparator-icon16.png
new file mode 100644
index 0000000000..68f22c5df1
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolseparator-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/toolseparator-icon@2x.png b/src/quickcontrols/designer/images/toolseparator-icon@2x.png
new file mode 100644
index 0000000000..549c11c67c
--- /dev/null
+++ b/src/quickcontrols/designer/images/toolseparator-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/tumbler-icon.png b/src/quickcontrols/designer/images/tumbler-icon.png
new file mode 100644
index 0000000000..98eb8232a2
--- /dev/null
+++ b/src/quickcontrols/designer/images/tumbler-icon.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/tumbler-icon16.png b/src/quickcontrols/designer/images/tumbler-icon16.png
new file mode 100644
index 0000000000..ff5f95cf32
--- /dev/null
+++ b/src/quickcontrols/designer/images/tumbler-icon16.png
Binary files differ
diff --git a/src/quickcontrols/designer/images/tumbler-icon@2x.png b/src/quickcontrols/designer/images/tumbler-icon@2x.png
new file mode 100644
index 0000000000..236abf0cfe
--- /dev/null
+++ b/src/quickcontrols/designer/images/tumbler-icon@2x.png
Binary files differ
diff --git a/src/quickcontrols/designer/qtquickcontrols2.metainfo b/src/quickcontrols/designer/qtquickcontrols2.metainfo
new file mode 100644
index 0000000000..1075cec62e
--- /dev/null
+++ b/src/quickcontrols/designer/qtquickcontrols2.metainfo
@@ -0,0 +1,535 @@
+MetaInfo {
+ Type {
+ name: "QtQuick.Controls.BusyIndicator"
+ icon: "images/busyindicator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Busy Indicator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/busyindicator-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Button"
+ icon: "images/button-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/button-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.CheckBox"
+ icon: "images/checkbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Check Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/checkbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Check Box\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.CheckDelegate"
+ icon: "images/checkbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Check Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/checkbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Check Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ComboBox"
+ icon: "images/combobox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Combo Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/combobox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Control"
+ icon: "images/control-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Control"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/control-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.DelayButton"
+ icon: "images/button-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Delay Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/delaybutton-icon.png"
+ version: "2.2"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Delay Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Dial"
+ icon: "images/dial-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Dial"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/dial-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Frame"
+ icon: "images/frame-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Frame"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/frame-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.GroupBox"
+ icon: "images/groupbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Group Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/groupbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ Property { name: "title"; type: "binding"; value: "qsTr(\"Group Box\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ItemDelegate"
+ icon: "images/itemdelegate-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Item Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/itemdelegate-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Item Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Label"
+ icon: "images/label-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Label"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/label-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Label\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Page"
+ icon: "images/page-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Page"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/page-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.PageIndicator"
+ icon: "images/pageindicator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Page Indicator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/pageindicator-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "count"; type: "int"; value: 3 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Pane"
+ icon: "images/pane-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Pane"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/pane-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ProgressBar"
+ icon: "images/progressbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Progress Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/progressbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "value"; type: "real"; value: 0.5 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.RadioButton"
+ icon: "images/radiobutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Radio Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/radiobutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.RadioDelegate"
+ icon: "images/radiobutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Radio Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/radiobutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Radio Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.RangeSlider"
+ icon: "images/rangeslider-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Range Slider"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/rangeslider-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "first.value"; type: "real"; value: 0.25 }
+ Property { name: "second.value"; type: "real"; value: 0.75 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.RoundButton"
+ icon: "images/roundbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Round Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/roundbutton-icon.png"
+ version: "2.1"
+ requiredImport: "QtQuick.Controls"
+ Property { name: "text"; type: "string"; value: "+" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Slider"
+ icon: "images/slider-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Slider"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/slider-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "value"; type: "real"; value: 0.5 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.SpinBox"
+ icon: "images/spinbox-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Spin Box"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/spinbox-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ScrollView"
+ icon: "images/scrollview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Scroll View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/scrollview-icon.png"
+ version: "2.2"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.StackView"
+ icon: "images/stackview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Stack View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/stackview-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.SwipeDelegate"
+ icon: "images/itemdelegate-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Swipe Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/itemdelegate-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Swipe Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.SwipeView"
+ icon: "images/swipeview-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Swipe View"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/swipeview-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 200 }
+ Property { name: "height"; type: "int"; value: 200 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Switch"
+ icon: "images/switch-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Switch"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/switch-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Switch\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.SwitchDelegate"
+ icon: "images/switch-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Switch Delegate"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/switch-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Switch Delegate\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.TabBar"
+ icon: "images/toolbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tab Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ Property { name: "width"; type: "int"; value: 240 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.TabButton"
+ icon: "images/toolbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tab Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Tab Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.TextArea"
+ icon: "images/textarea-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Text Area"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/textarea-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Area\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.TextField"
+ icon: "images/textfield-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Text Field"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/textfield-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "placeholderText"; type: "binding"; value: "qsTr(\"Text Field\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ToolBar"
+ icon: "images/toolbar-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Bar"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbar-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "width"; type: "int"; value: 360 }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ToolButton"
+ icon: "images/toolbutton-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Button"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolbutton-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "text"; type: "binding"; value: "qsTr(\"Tool Button\")" }
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.ToolSeparator"
+ icon: "images/toolseparator-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tool Separator"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/toolseparator-icon.png"
+ version: "2.1"
+ requiredImport: "QtQuick.Controls"
+ }
+ }
+
+ Type {
+ name: "QtQuick.Controls.Tumbler"
+ icon: "images/tumbler-icon16.png"
+
+ ItemLibraryEntry {
+ name: "Tumbler"
+ category: "Qt Quick - Controls 2"
+ libraryIcon: "images/tumbler-icon.png"
+ version: "2.0"
+ requiredImport: "QtQuick.Controls"
+
+ Property { name: "model"; type: "int"; value: "10" }
+ }
+ }
+}
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-applicationwindow-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-applicationwindow-wireframe.png
new file mode 100644
index 0000000000..f31378004a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-applicationwindow-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-basic-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-basic-thumbnail.png
new file mode 100644
index 0000000000..e971a7aaec
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-basic-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-basic.png b/src/quickcontrols/doc/images/qtquickcontrols2-basic.png
new file mode 100644
index 0000000000..099db17038
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-basic.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator-custom.png
new file mode 100644
index 0000000000..fefae223ef
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.gif b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.gif
new file mode 100644
index 0000000000..653d200f3c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.png b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.png
new file mode 100644
index 0000000000..4be09579bb
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-busyindicator.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-button-custom.png
new file mode 100644
index 0000000000..46d3e3eb5e
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-flat.gif b/src/quickcontrols/doc/images/qtquickcontrols2-button-flat.gif
new file mode 100644
index 0000000000..e2bd8b6fcf
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-flat.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-highlighted.gif b/src/quickcontrols/doc/images/qtquickcontrols2-button-highlighted.gif
new file mode 100644
index 0000000000..7de076d3d0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-highlighted.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-icononly.png b/src/quickcontrols/doc/images/qtquickcontrols2-button-icononly.png
new file mode 100644
index 0000000000..9c8dd0f43f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-icononly.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-textbesideicon.png b/src/quickcontrols/doc/images/qtquickcontrols2-button-textbesideicon.png
new file mode 100644
index 0000000000..3dc64fb92b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-textbesideicon.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-textonly.png b/src/quickcontrols/doc/images/qtquickcontrols2-button-textonly.png
new file mode 100644
index 0000000000..737beb165f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-textonly.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button-textundericon.png b/src/quickcontrols/doc/images/qtquickcontrols2-button-textundericon.png
new file mode 100644
index 0000000000..37c40c7c66
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button-textundericon.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-button.gif b/src/quickcontrols/doc/images/qtquickcontrols2-button.gif
new file mode 100644
index 0000000000..10d626a331
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-button.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-calendarmodel.png b/src/quickcontrols/doc/images/qtquickcontrols2-calendarmodel.png
new file mode 100644
index 0000000000..a017682326
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-calendarmodel.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-custom.png
new file mode 100644
index 0000000000..c6c3d1bcbd
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-group.png b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-group.png
new file mode 100644
index 0000000000..d5a0d51be6
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-group.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-tristate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-tristate.gif
new file mode 100644
index 0000000000..56a1586795
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox-tristate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkbox.gif b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox.gif
new file mode 100644
index 0000000000..d70c0ee4b9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkbox.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-custom.png
new file mode 100644
index 0000000000..c0dd06892c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-tristate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-tristate.gif
new file mode 100644
index 0000000000..8d058d6c54
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate-tristate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate.gif
new file mode 100644
index 0000000000..da3fab98a4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-checkdelegate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-combobox-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-custom.png
new file mode 100644
index 0000000000..4f7206dc78
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-combobox-delegate.png b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-delegate.png
new file mode 100644
index 0000000000..cf31064895
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-delegate.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-combobox-popup.png b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-popup.png
new file mode 100644
index 0000000000..cf31064895
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-combobox-popup.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-combobox.gif b/src/quickcontrols/doc/images/qtquickcontrols2-combobox.gif
new file mode 100644
index 0000000000..966a2d4ae5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-combobox.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-control.png b/src/quickcontrols/doc/images/qtquickcontrols2-control.png
new file mode 100644
index 0000000000..0f004a89dd
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-control.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-control.svg b/src/quickcontrols/doc/images/qtquickcontrols2-control.svg
new file mode 100644
index 0000000000..4b2057d197
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-control.svg
@@ -0,0 +1,936 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="760"
+ height="580"
+ viewBox="0 0 759.99997 579.99999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ sodipodi:docname="qtquickcontrols2-control.svg"
+ inkscape:export-filename="/home/jpnurmi/Projects/qt-dev/qtquickcontrols2/src/imports/controls/doc/images/qtquickcontrols2-control.png"
+ inkscape:export-xdpi="192"
+ inkscape:export-ydpi="192">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4191"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4212"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-5"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9-6-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2-2-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1-1-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2-7-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8-3"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4-46"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9-5"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1-9-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8-3-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96-3-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4-46-3"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9-5-8"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6-6-1"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4-1-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8-7-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4142136"
+ inkscape:cx="138.75529"
+ inkscape:cy="425.28174"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="3840"
+ inkscape:window-height="2031"
+ inkscape:window-x="0"
+ inkscape:window-y="55"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ units="px" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(91.482322,-32.9581)">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.05102265;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4136"
+ width="518.94897"
+ height="298.94897"
+ x="29.043194"
+ y="193.48361" />
+ <rect
+ style="fill:#ffd5d5;fill-opacity:1;stroke:none;stroke-width:0.83021182;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4136-3"
+ width="440"
+ height="220"
+ x="68.517685"
+ y="232.9581" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(1.1690183,0,0,1.1690183,115.80023,-231.31953)"><flowRegion
+ id="flowRegion4140"
+ style="fill:#ff2a2a"><rect
+ id="rect4142"
+ width="129.78784"
+ height="31.668232"
+ x="-34.519978"
+ y="400.22751"
+ style="font-size:15.41801071px;fill:#ff2a2a" /></flowRegion><flowPara
+ id="flowPara4144"
+ style="font-size:20.55734825px;line-height:1.25;fill:#ff2a2a">Background</flowPara><flowPara
+ id="flowPara4146"
+ style="font-size:20.55734825px;line-height:1.25;fill:#ff2a2a"> </flowPara></flowRoot> <rect
+ style="fill:#d7e3f4;fill-opacity:1;stroke:none;stroke-width:22.32431984;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.58381503"
+ id="rect4148"
+ width="360"
+ height="140"
+ x="108.51768"
+ y="272.95813" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,184.57261,41.294224)"><flowRegion
+ id="flowRegion4140-6"
+ style="fill:#0055d4"><rect
+ id="rect4142-6"
+ width="334.36047"
+ height="80.812172"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:40px;fill:#0055d4" /></flowRegion><flowPara
+ id="flowPara4146-6"
+ style="font-size:40px;line-height:1.25;fill:#0055d4">Content item</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-1"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,247.75903,220.21488)"><flowRegion
+ id="flowRegion4140-6-9"><rect
+ id="rect4142-6-0"
+ width="270.72089"
+ height="68.690361"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:25px;fill:#000000" /></flowRegion><flowPara
+ id="flowPara4146-6-2"
+ style="font-size:17.5px;line-height:1.25">Width</flowPara></flowRoot> <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93053311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-3);marker-end:url(#TriangleOutL-0)"
+ d="M 33.168982,505.52033 H 543.32948"
+ id="path4179-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9);marker-end:url(#TriangleOutL-1)"
+ d="M 16.517683,487.33858 V 198.57762"
+ id="path4179-9"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-1-7"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-50.003525,47.195824)"><flowRegion
+ id="flowRegion4140-6-9-7"><rect
+ id="rect4142-6-0-5"
+ width="270.72089"
+ height="68.690361"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ id="flowPara4146-6-2-9"
+ style="font-size:17.5px;line-height:1.25;fill:#000000">Height</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-3"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,206.65956,-144.78636)"><flowRegion
+ id="flowRegion4140-6-67"><rect
+ id="rect4142-6-5"
+ width="334.36047"
+ height="80.812172"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:60px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:60px;line-height:1.25"
+ id="flowPara14323">Popup</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,41.217752,149.93493)"><flowRegion
+ id="flowRegion4140-6-6-4-6"
+ style="text-align:center;text-anchor:middle;fill:#0055d4"><rect
+ id="rect4142-6-1-4-2"
+ width="252.53812"
+ height="61.619293"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;text-align:center;text-anchor:middle;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara10048-9">Bottom</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara5290">padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,384.82399,-69.046412)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-7"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara10048-9-0">Top</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara4830">padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,458.14041,-0.80935844)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-6"
+ width="81.109558"
+ height="93.762154"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0055d4"
+ id="flowPara4386">Right padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,19.173452,87.133114)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-6-4"
+ width="81.109558"
+ height="93.762154"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0055d4"
+ id="flowPara4386-0">Left padding</flowPara></flowRoot> <path
+ style="fill:#ff2a2a;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87824047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9-6);marker-end:url(#TriangleOutL-1-1)"
+ d="M 72.916183,227.96278 V 198.98852"
+ id="path4179-9-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87323481;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5);marker-end:url(#TriangleOutL-9-4)"
+ d="M 34.529058,238.58445 H 63.562954"
+ id="path4179-7-8"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-5"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,47.895402,-88.000508)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-9"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-7-7"
+ width="66.476036"
+ height="55.080368"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara11237">Top inset</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2-3"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,0.4414194,-43.952242)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5-8"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-6-4-8"
+ width="75.759529"
+ height="93.167732"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara4386-0-3">Left inset</flowPara></flowRoot> <path
+ style="fill:#0055d4;fill-rule:evenodd;stroke:#0055d4;stroke-width:0.97500122;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1);marker-end:url(#TriangleOutL-96)"
+ d="M 462.28757,267.38769 V 199.50991"
+ id="path4179-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ff2a2a;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87794411;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9-6-4);marker-end:url(#TriangleOutL-1-1-6)"
+ d="M 504.22784,486.94146 V 457.98675"
+ id="path4179-9-8-9"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-5-0"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,424.36985,170.98794)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-9-6"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-7-7-8"
+ width="91.442841"
+ height="44.974762"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara11237-7">Bottom inset</flowPara></flowRoot> <path
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87314719;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6);marker-end:url(#TriangleOutL-9-4-8)"
+ d="M 513.47562,448.6218 H 542.5037"
+ id="path4179-7-8-6"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2-3-0"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,479.24023,126.32002)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5-8-7"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-6-4-8-0"
+ width="75.759529"
+ height="93.167732"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara3807">Right inset</flowPara></flowRoot> <path
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.05938387;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9);marker-end:url(#TriangleOutL-9-4-8-4)"
+ d="m 474.52523,278.31524 h 66.93934"
+ id="path4179-7-8-6-0"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#0055d4;fill-rule:evenodd;stroke:#0055d4;stroke-width:0.97513783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1-7);marker-end:url(#TriangleOutL-96-7)"
+ d="M 114.58911,486.37854 V 418.48175"
+ id="path4179-3-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.05900466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9-1);marker-end:url(#TriangleOutL-9-4-8-4-0)"
+ d="M 35.582232,406.88667 H 102.47366"
+ id="path4179-7-8-6-0-0"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.38;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4136-9"
+ width="638.62036"
+ height="418.6203"
+ x="-30.792475"
+ y="133.64795" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-3-8"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,192.12072,-213.92909)"><flowRegion
+ id="flowRegion4140-6-67-1"><rect
+ id="rect4142-6-5-6"
+ width="334.36047"
+ height="80.812172"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:60px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:60px;line-height:1.25"
+ id="flowPara14323-3">Window</flowPara></flowRoot> <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.83036995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1-9);marker-end:url(#TriangleOutL-96-3)"
+ d="M 16.507747,188.209 V 138.97553"
+ id="path4179-3-1"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.90094262;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9-5);marker-end:url(#TriangleOutL-9-4-8-4-1)"
+ d="m 553.67227,505.52244 h 48.41379"
+ id="path4179-7-8-6-0-2"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-2"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-53.285062,-138.90295)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-92"
+ style="fill:#000000"><rect
+ id="rect4142-6-1-4-2-7-8"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara10048-9-0-1">Top</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara4830-2">margin</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-2-4"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,530.78767,225.71855)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-92-7"
+ style="fill:#000000"><rect
+ id="rect4142-6-1-4-2-7-8-8"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara10048-9-0-1-6">Right</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara4830-2-3">margin</flowPara></flowRoot> <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.83036995;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1-9-7);marker-end:url(#TriangleOutL-96-3-2)"
+ d="M 16.459117,546.78218 V 497.54871"
+ id="path4179-3-1-7"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-2-2"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-0.06072146,225.50386)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-92-5"
+ style="fill:#000000"><rect
+ id="rect4142-6-1-4-2-7-8-3"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara10048-9-0-1-7">Bottom</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara4830-2-6">margin</flowPara></flowRoot> <path
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.89733517;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9-5-8);marker-end:url(#TriangleOutL-9-4-8-4-1-3)"
+ d="M -25.075855,505.54405 H 22.951007"
+ id="path4179-7-8-6-0-2-4"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-2-2-0"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-55.529842,180.17847)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-92-5-3"
+ style="fill:#000000"><rect
+ id="rect4142-6-1-4-2-7-8-3-5"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara10048-9-0-1-7-8">Left</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#000000"
+ id="flowPara4830-2-6-5">margin</flowPara></flowRoot> </g>
+</svg>
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-customize-buttons.png b/src/quickcontrols/doc/images/qtquickcontrols2-customize-buttons.png
new file mode 100644
index 0000000000..551e8a0cf7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-customize-buttons.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow-layout.png b/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow-layout.png
new file mode 100644
index 0000000000..3a816e85a9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow-layout.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow.png b/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow.png
new file mode 100644
index 0000000000..7548e22147
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dayofweekrow.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton-custom.png
new file mode 100644
index 0000000000..a7bd7c19d8
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton.gif b/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton.gif
new file mode 100644
index 0000000000..16a198f9cb
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-delaybutton.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-dial-custom.png
new file mode 100644
index 0000000000..6312c99933
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-handle.png b/src/quickcontrols/doc/images/qtquickcontrols2-dial-handle.png
new file mode 100644
index 0000000000..9e22b2e709
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-handle.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputMode.svgz b/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputMode.svgz
new file mode 100644
index 0000000000..005ab7b331
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputMode.svgz
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputmode.png b/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputmode.png
new file mode 100644
index 0000000000..5bbc41a49c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-inputmode.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-no-wrap.gif b/src/quickcontrols/doc/images/qtquickcontrols2-dial-no-wrap.gif
new file mode 100644
index 0000000000..24f6790b6d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-no-wrap.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial-wrap.gif b/src/quickcontrols/doc/images/qtquickcontrols2-dial-wrap.gif
new file mode 100644
index 0000000000..cfb1fb5b10
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial-wrap.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dial.png b/src/quickcontrols/doc/images/qtquickcontrols2-dial.png
new file mode 100644
index 0000000000..71c54113b7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dial.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png b/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png
new file mode 100644
index 0000000000..c17f38ac0c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox-attached.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox.png b/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox.png
new file mode 100644
index 0000000000..33b5f45f4f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-dialogbuttonbox.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png
new file mode 100644
index 0000000000..0c92f86587
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-drawer-expanded-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-drawer-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-drawer-wireframe.png
new file mode 100644
index 0000000000..74806f17b7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-drawer-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-drawer.gif b/src/quickcontrols/doc/images/qtquickcontrols2-drawer.gif
new file mode 100644
index 0000000000..736f34f66f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-drawer.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-frame-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-frame-custom.png
new file mode 100644
index 0000000000..f628b20c20
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-frame-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-frame.png b/src/quickcontrols/doc/images/qtquickcontrols2-frame.png
new file mode 100644
index 0000000000..e3cb31dc71
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-frame.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-fusion-palettes.png b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-palettes.png
new file mode 100644
index 0000000000..d806116167
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-palettes.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-fusion-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-thumbnail.png
new file mode 100644
index 0000000000..c270c6efba
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-fusion-violet.png b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-violet.png
new file mode 100644
index 0000000000..99e5b59786
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-fusion-violet.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-fusion.png b/src/quickcontrols/doc/images/qtquickcontrols2-fusion.png
new file mode 100644
index 0000000000..7119ef225d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-fusion.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-checkable.png b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-checkable.png
new file mode 100644
index 0000000000..820ad79c80
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-checkable.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-custom.png
new file mode 100644
index 0000000000..029679ced0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-label.png b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-label.png
new file mode 100644
index 0000000000..c26795a7a7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox-label.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-groupbox.png b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox.png
new file mode 100644
index 0000000000..ea2f9ea5c5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-groupbox.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-4x.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-4x.png
new file mode 100644
index 0000000000..bab99a5e55
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-4x.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png
new file mode 100644
index 0000000000..c42df81edc
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset-boundaries.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset.png
new file mode 100644
index 0000000000..0627d08590
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-inset.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png
new file mode 100644
index 0000000000..0a606c9926
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-padding.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png
new file mode 100644
index 0000000000..9598b13a1c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-resized-stretchable.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-size.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-size.png
new file mode 100644
index 0000000000..db6453758f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch-size.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch.svgz b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch.svgz
new file mode 100644
index 0000000000..5a1a1094d1
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-9-patch.svgz
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization-dark.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization-dark.png
new file mode 100644
index 0000000000..144ac97c87
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization-dark.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization.svgz b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization.svgz
new file mode 100644
index 0000000000..fb8305638b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-customization.svgz
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-thumbnail.png
new file mode 100644
index 0000000000..ecf2bb163d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-imagine.png b/src/quickcontrols/doc/images/qtquickcontrols2-imagine.png
new file mode 100644
index 0000000000..ffe2c267b2
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-imagine.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-ios-dark.png b/src/quickcontrols/doc/images/qtquickcontrols2-ios-dark.png
new file mode 100644
index 0000000000..fd4609c729
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-ios-dark.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-ios-light.png b/src/quickcontrols/doc/images/qtquickcontrols2-ios-light.png
new file mode 100644
index 0000000000..f990078ddf
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-ios-light.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate-custom.png
new file mode 100644
index 0000000000..35f8892f16
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.gif
new file mode 100644
index 0000000000..dccb6efcdb
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.png b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.png
new file mode 100644
index 0000000000..7242f343a0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-itemdelegate.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-label-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-label-custom.png
new file mode 100644
index 0000000000..5730ff23bf
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-label-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-label.png b/src/quickcontrols/doc/images/qtquickcontrols2-label.png
new file mode 100644
index 0000000000..0bafcf8602
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-label.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-macos-dark.png b/src/quickcontrols/doc/images/qtquickcontrols2-macos-dark.png
new file mode 100644
index 0000000000..97d8a5a4e7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-macos-dark.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-macos-light.png b/src/quickcontrols/doc/images/qtquickcontrols2-macos-light.png
new file mode 100644
index 0000000000..4a598ad498
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-macos-light.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-macos-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-macos-thumbnail.png
new file mode 100644
index 0000000000..57fd98d63a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-macos-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-accent.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-accent.png
new file mode 100644
index 0000000000..a85afc68ed
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-accent.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-attributes.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-attributes.png
new file mode 100644
index 0000000000..bb54071d79
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-attributes.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-background.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-background.png
new file mode 100644
index 0000000000..62028f523c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-background.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-dark.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-dark.png
new file mode 100644
index 0000000000..f6e45b3b1c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-dark.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-elevation.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-elevation.png
new file mode 100644
index 0000000000..d152f14529
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-elevation.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-foreground.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-foreground.png
new file mode 100644
index 0000000000..0d0e1b651a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-foreground.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-light.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-light.png
new file mode 100644
index 0000000000..c9abe2cb8b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-light.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-purple.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-purple.png
new file mode 100644
index 0000000000..b955736b0b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-purple.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-theme.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-theme.png
new file mode 100644
index 0000000000..1d09a82580
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-theme.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-thumbnail.png
new file mode 100644
index 0000000000..d758ff1803
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-dense.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-dense.png
new file mode 100644
index 0000000000..02f39b7885
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-dense.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-normal.png b/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-normal.png
new file mode 100644
index 0000000000..c1e366c531
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-material-variant-normal.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menu-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-menu-custom.png
new file mode 100644
index 0000000000..922bf591b5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menu-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menu.gif b/src/quickcontrols/doc/images/qtquickcontrols2-menu.gif
new file mode 100644
index 0000000000..93a873a33a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menu.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menu.png b/src/quickcontrols/doc/images/qtquickcontrols2-menu.png
new file mode 100644
index 0000000000..926c33eed2
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menu.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menubar-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-menubar-custom.png
new file mode 100644
index 0000000000..b6007e466d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menubar-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menubar.png b/src/quickcontrols/doc/images/qtquickcontrols2-menubar.png
new file mode 100644
index 0000000000..873b7a1960
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menubar.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator-custom.png
new file mode 100644
index 0000000000..78635b9c88
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator.png b/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator.png
new file mode 100644
index 0000000000..35307817f6
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-menuseparator.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid-layout.png b/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid-layout.png
new file mode 100644
index 0000000000..f67501a751
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid-layout.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid.png b/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid.png
new file mode 100644
index 0000000000..a2f9a47f70
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-monthgrid.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-page-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-page-wireframe.png
new file mode 100644
index 0000000000..f612c243c4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-page-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-custom.png
new file mode 100644
index 0000000000..a767a51aa0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-delegate.png b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-delegate.png
new file mode 100644
index 0000000000..95acde70cf
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator-delegate.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator.png b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator.png
new file mode 100644
index 0000000000..e2a0a157f6
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-pageindicator.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-pane-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-pane-custom.png
new file mode 100644
index 0000000000..03a0369f56
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-pane-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-pane.png b/src/quickcontrols/doc/images/qtquickcontrols2-pane.png
new file mode 100644
index 0000000000..3801cc3efb
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-pane.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-popup-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-popup-custom.png
new file mode 100644
index 0000000000..cb7813d387
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-popup-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-popup-settings.png b/src/quickcontrols/doc/images/qtquickcontrols2-popup-settings.png
new file mode 100644
index 0000000000..5122158ef4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-popup-settings.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-popup-transformorigin.png b/src/quickcontrols/doc/images/qtquickcontrols2-popup-transformorigin.png
new file mode 100644
index 0000000000..16d2617786
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-popup-transformorigin.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-popup.png b/src/quickcontrols/doc/images/qtquickcontrols2-popup.png
new file mode 100644
index 0000000000..8fc424a854
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-popup.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-popup.svg b/src/quickcontrols/doc/images/qtquickcontrols2-popup.svg
new file mode 100644
index 0000000000..e39f3dce21
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-popup.svg
@@ -0,0 +1,712 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="640"
+ height="420"
+ viewBox="0 0 639.99997 419.99999"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.92.3 (2405546, 2018-03-11)"
+ sodipodi:docname="qtquickcontrols2-control.svg"
+ inkscape:export-filename="/home/jpnurmi/Projects/qt-dev/qtquickcontrols2/src/imports/controls/doc/images/qtquickcontrols2-control.png"
+ inkscape:export-xdpi="192"
+ inkscape:export-ydpi="192">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Mstart"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow1Mstart"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4191"
+ d="M 0,0 5,-5 -12.5,0 5,5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="matrix(0.4,0,0,0.4,4,0)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow2Mend"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="Arrow2Mend"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4212"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+ transform="scale(-0.6)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-3"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-5"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-9-6-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-2-2-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-1-1-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-2-7-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-1-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4318-8-9"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-96-7"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ id="path4327-4-4"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)"
+ inkscape:connector-curvature="0" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleInL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleInL-2-5-6-9-1"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4318-4-7-2-6-7"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(-0.8)" />
+ </marker>
+ <marker
+ inkscape:stockid="TriangleOutL"
+ orient="auto"
+ refY="0"
+ refX="0"
+ id="TriangleOutL-9-4-8-4-0"
+ style="overflow:visible"
+ inkscape:isstock="true">
+ <path
+ inkscape:connector-curvature="0"
+ id="path4327-1-1-9-8-6"
+ d="M 5.77,0 -2.88,5 V -5 Z"
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.00000003pt;stroke-opacity:1"
+ transform="scale(0.8)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="2.8284271"
+ inkscape:cx="328.65009"
+ inkscape:cy="205.42326"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="3840"
+ inkscape:window-height="2031"
+ inkscape:window-x="0"
+ inkscape:window-y="55"
+ inkscape:window-maximized="1"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ units="px" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(91.482322,-192.9581)">
+ <rect
+ style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:1.05102265;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4136"
+ width="518.94897"
+ height="298.94897"
+ x="-30.956812"
+ y="253.48361" />
+ <rect
+ style="fill:#ffd5d5;fill-opacity:1;stroke:none;stroke-width:0.83021182;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="rect4136-3"
+ width="440"
+ height="220"
+ x="8.5176783"
+ y="292.9581" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(1.1690183,0,0,1.1690183,55.80022,-171.31953)"><flowRegion
+ id="flowRegion4140"
+ style="fill:#ff2a2a"><rect
+ id="rect4142"
+ width="129.78784"
+ height="31.668232"
+ x="-34.519978"
+ y="400.22751"
+ style="font-size:15.41801071px;fill:#ff2a2a" /></flowRegion><flowPara
+ id="flowPara4144"
+ style="font-size:20.55734825px;line-height:1.25;fill:#ff2a2a">Background</flowPara><flowPara
+ id="flowPara4146"
+ style="font-size:20.55734825px;line-height:1.25;fill:#ff2a2a"> </flowPara></flowRoot> <rect
+ style="fill:#d7e3f4;fill-opacity:1;stroke:none;stroke-width:22.32431984;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.58381503"
+ id="rect4148"
+ width="360"
+ height="140"
+ x="48.517677"
+ y="332.95813" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,124.5726,101.29422)"><flowRegion
+ id="flowRegion4140-6"
+ style="fill:#0055d4"><rect
+ id="rect4142-6"
+ width="334.36047"
+ height="80.812172"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:40px;fill:#0055d4" /></flowRegion><flowPara
+ id="flowPara4146-6"
+ style="font-size:40px;line-height:1.25;fill:#0055d4">Content item</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-1"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,187.75902,280.21488)"><flowRegion
+ id="flowRegion4140-6-9"><rect
+ id="rect4142-6-0"
+ width="270.72089"
+ height="68.690361"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:25px;fill:#000000" /></flowRegion><flowPara
+ id="flowPara4146-6-2"
+ style="font-size:17.5px;line-height:1.25">Width</flowPara></flowRoot> <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:0.93053311;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-3);marker-end:url(#TriangleOutL-0)"
+ d="M -26.831023,563.52033 H 483.32947"
+ id="path4179-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#000000;fill-rule:evenodd;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9);marker-end:url(#TriangleOutL-1)"
+ d="M -41.482322,547.33858 V 258.57762"
+ id="path4179-9"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-1-7"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-110.00353,107.19582)"><flowRegion
+ id="flowRegion4140-6-9-7"><rect
+ id="rect4142-6-0-5"
+ width="270.72089"
+ height="68.690361"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#000000" /></flowRegion><flowPara
+ id="flowPara4146-6-2-9"
+ style="font-size:17.5px;line-height:1.25;fill:#000000">Height</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-3"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,138.50125,-84.786365)"><flowRegion
+ id="flowRegion4140-6-67"><rect
+ id="rect4142-6-5"
+ width="334.36047"
+ height="80.812172"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:60px;fill:#000000" /></flowRegion><flowPara
+ id="flowPara4146-6-3"
+ style="font-size:60px;line-height:1.25">Control</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;text-align:center;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-18.782253,209.93493)"><flowRegion
+ id="flowRegion4140-6-6-4-6"
+ style="text-align:center;text-anchor:middle;fill:#0055d4"><rect
+ id="rect4142-6-1-4-2"
+ width="252.53812"
+ height="61.619293"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;text-align:center;text-anchor:middle;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara10048-9">Bottom</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara5290">padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,324.82398,-9.0464154)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-7"
+ width="71.826065"
+ height="43.785866"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara10048-9-0">Top</flowPara><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#0055d4"
+ id="flowPara4830">padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,398.1404,59.190638)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-6"
+ width="81.109558"
+ height="93.762154"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0055d4"
+ id="flowPara4386">Right padding</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#0055d4;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-40.826553,147.13311)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5"
+ style="fill:#0055d4"><rect
+ id="rect4142-6-1-4-2-6-4"
+ width="81.109558"
+ height="93.762154"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#0055d4" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#0055d4"
+ id="flowPara4386-0">Left padding</flowPara></flowRoot> <path
+ style="fill:#ff2a2a;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87824047;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9-6);marker-end:url(#TriangleOutL-1-1)"
+ d="M 12.916178,287.96278 V 258.98852"
+ id="path4179-9-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87323481;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5);marker-end:url(#TriangleOutL-9-4)"
+ d="M -25.470947,298.58445 H 3.5629489"
+ id="path4179-7-8"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-5"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-12.104603,-28.000512)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-9"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-7-7"
+ width="66.476036"
+ height="55.080368"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara11237">Top inset</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2-3"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,-59.558586,16.047754)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5-8"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-6-4-8"
+ width="75.759529"
+ height="93.167732"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara4386-0-3">Left inset</flowPara></flowRoot> <path
+ style="fill:#0055d4;fill-rule:evenodd;stroke:#0055d4;stroke-width:0.97500122;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1);marker-end:url(#TriangleOutL-96)"
+ d="M 402.28756,327.38769 V 259.50991"
+ id="path4179-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#ff2a2a;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87794411;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-9-6-4);marker-end:url(#TriangleOutL-1-1-6)"
+ d="M 444.22783,546.94146 V 517.98675"
+ id="path4179-9-8-9"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-1-5-0"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,364.36984,230.98794)"><flowRegion
+ id="flowRegion4140-6-6-4-6-2-9-6"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-7-7-8"
+ width="91.442841"
+ height="44.974762"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.5px;line-height:1.25;text-align:center;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara11237-7">Bottom inset</flowPara></flowRoot> <path
+ style="fill:#ff2a2a;fill-opacity:1;fill-rule:evenodd;stroke:#ff2a2a;stroke-width:0.87314719;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6);marker-end:url(#TriangleOutL-9-4-8)"
+ d="m 453.47561,508.6218 h 29.02808"
+ id="path4179-7-8-6"
+ inkscape:connector-curvature="0" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot4138-6-2-7-5-9-2-3-0"
+ style="font-style:normal;font-weight:normal;line-height:0.01%;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ff2a2a;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ transform="matrix(0.6007979,0,0,0.6007979,419.24022,186.32002)"><flowRegion
+ id="flowRegion4140-6-6-4-6-3-5-8-7"
+ style="fill:#ff2a2a"><rect
+ id="rect4142-6-1-4-2-6-4-8-0"
+ width="75.759529"
+ height="93.167732"
+ x="42.426407"
+ y="481.62601"
+ style="font-size:17.5px;fill:#ff2a2a" /></flowRegion><flowPara
+ style="font-size:17.02554321px;line-height:125%;text-align:center;writing-mode:lr-tb;text-anchor:middle;fill:#ff2a2a"
+ id="flowPara3807">Right inset</flowPara></flowRoot> <path
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.05938387;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9);marker-end:url(#TriangleOutL-9-4-8-4)"
+ d="m 414.52522,338.31524 h 66.93934"
+ id="path4179-7-8-6-0"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#0055d4;fill-rule:evenodd;stroke:#0055d4;stroke-width:0.97513783;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-1-7);marker-end:url(#TriangleOutL-96-7)"
+ d="M 54.589106,546.37854 V 478.48175"
+ id="path4179-3-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="fill:#0055d4;fill-opacity:1;fill-rule:evenodd;stroke:#0055d4;stroke-width:1.05900466;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-start:url(#TriangleInL-2-5-6-9-1);marker-end:url(#TriangleOutL-9-4-8-4-0)"
+ d="M -24.417773,466.88667 H 42.473651"
+ id="path4179-7-8-6-0-0"
+ inkscape:connector-curvature="0" />
+ </g>
+</svg>
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-custom.png
new file mode 100644
index 0000000000..9d73df2c25
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-indeterminate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-indeterminate.gif
new file mode 100644
index 0000000000..d6756d16fd
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar-indeterminate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-progressbar.gif b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar.gif
new file mode 100644
index 0000000000..49af5f45a1
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-progressbar.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton-custom.png
new file mode 100644
index 0000000000..5c85179f70
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton.gif b/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton.gif
new file mode 100644
index 0000000000..4cbf3ed9d6
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-radiobutton.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate-custom.png
new file mode 100644
index 0000000000..7d32699bf9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate.gif
new file mode 100644
index 0000000000..b6afd6fe6a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-radiodelegate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider-custom.png
new file mode 100644
index 0000000000..47379a300d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider.gif b/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider.gif
new file mode 100644
index 0000000000..db565b0a93
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-rangeslider.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-roundbutton.png b/src/quickcontrols/doc/images/qtquickcontrols2-roundbutton.png
new file mode 100644
index 0000000000..4dce37f239
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-roundbutton.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-custom.png
new file mode 100644
index 0000000000..690bc8beef
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-non-attached.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-non-attached.png
new file mode 100644
index 0000000000..eba363dda2
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-non-attached.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-nosnap.gif b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-nosnap.gif
new file mode 100644
index 0000000000..f61ac5b46a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-nosnap.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snapalways.gif b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snapalways.gif
new file mode 100644
index 0000000000..438d4a3318
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snapalways.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif
new file mode 100644
index 0000000000..c2fa67b027
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar-snaponrelease.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar.gif b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar.gif
new file mode 100644
index 0000000000..ed3ab607d9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollbar.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-custom.png
new file mode 100644
index 0000000000..b1183bc52a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-non-attached.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-non-attached.png
new file mode 100644
index 0000000000..a61e048743
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator-non-attached.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator.gif b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator.gif
new file mode 100644
index 0000000000..73007820f8
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollindicator.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-custom.png
new file mode 100644
index 0000000000..8f4bd92863
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-wireframe.png
new file mode 100644
index 0000000000..8a39056aa9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-scrollview.png b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview.png
new file mode 100644
index 0000000000..1a4039e1fd
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-scrollview.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-selectionrectangle.png b/src/quickcontrols/doc/images/qtquickcontrols2-selectionrectangle.png
new file mode 100644
index 0000000000..69e47b2909
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-selectionrectangle.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-slider-custom.png
new file mode 100644
index 0000000000..dbbacb343f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider-handle.png b/src/quickcontrols/doc/images/qtquickcontrols2-slider-handle.png
new file mode 100644
index 0000000000..5450d57480
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider-handle.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider-nosnap.gif b/src/quickcontrols/doc/images/qtquickcontrols2-slider-nosnap.gif
new file mode 100644
index 0000000000..ab233c5b93
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider-nosnap.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider-snapalways.gif b/src/quickcontrols/doc/images/qtquickcontrols2-slider-snapalways.gif
new file mode 100644
index 0000000000..8eb4011fb5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider-snapalways.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider-snaponrelease.gif b/src/quickcontrols/doc/images/qtquickcontrols2-slider-snaponrelease.gif
new file mode 100644
index 0000000000..f3b1d5c7a9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider-snaponrelease.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-slider.gif b/src/quickcontrols/doc/images/qtquickcontrols2-slider.gif
new file mode 100644
index 0000000000..2ee56334e0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-slider.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-custom.png
new file mode 100644
index 0000000000..d1e883fc56
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-double.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-double.png
new file mode 100644
index 0000000000..d3f5876c4a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-double.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-down.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-down.png
new file mode 100644
index 0000000000..1d5dcf7b44
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-down.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-textual.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-textual.png
new file mode 100644
index 0000000000..5513d6e67d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-textual.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-up.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-up.png
new file mode 100644
index 0000000000..1ee1c4798e
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox-up.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-spinbox.png b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox.png
new file mode 100644
index 0000000000..835bb1d67d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-spinbox.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-splitview-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-splitview-custom.png
new file mode 100644
index 0000000000..da820ccafe
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-splitview-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-custom.png
new file mode 100644
index 0000000000..5ee6049e74
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-pop.gif b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-pop.gif
new file mode 100644
index 0000000000..1971c2e004
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-pop.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-push.gif b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-push.gif
new file mode 100644
index 0000000000..0218cc0f2f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-push.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-replace.gif b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-replace.gif
new file mode 100644
index 0000000000..63a6b2b4b5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-replace.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-unwind.gif b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-unwind.gif
new file mode 100644
index 0000000000..28c051d866
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-unwind.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-visible.png b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-visible.png
new file mode 100644
index 0000000000..d937b417e6
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-visible.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-stackview-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-wireframe.png
new file mode 100644
index 0000000000..f28b5c67de
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-stackview-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-styles.png b/src/quickcontrols/doc/images/qtquickcontrols2-styles.png
new file mode 100644
index 0000000000..992dd47eba
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-styles.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-behind.gif b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-behind.gif
new file mode 100644
index 0000000000..97d6a59277
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-behind.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-custom.png
new file mode 100644
index 0000000000..5813b73cf4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif
new file mode 100644
index 0000000000..0641bd1400
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate-leading-trailing.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate.gif
new file mode 100644
index 0000000000..86c380b7b3
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipedelegate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-indicator.png b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-indicator.png
new file mode 100644
index 0000000000..998ec9f7c9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-indicator.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-wireframe.png
new file mode 100644
index 0000000000..3cc2b83c4b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-swipeview.gif b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview.gif
new file mode 100644
index 0000000000..4af26c1058
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-swipeview.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switch-checked.png b/src/quickcontrols/doc/images/qtquickcontrols2-switch-checked.png
new file mode 100644
index 0000000000..7a0cde1bad
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switch-checked.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switch-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-switch-custom.png
new file mode 100644
index 0000000000..6d535ef96f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switch-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switch.gif b/src/quickcontrols/doc/images/qtquickcontrols2-switch.gif
new file mode 100644
index 0000000000..5f956304a0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switch.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switch.png b/src/quickcontrols/doc/images/qtquickcontrols2-switch.png
new file mode 100644
index 0000000000..7f613f3343
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switch.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate-custom.png
new file mode 100644
index 0000000000..f5337e2c83
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate.gif b/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate.gif
new file mode 100644
index 0000000000..950b10731f
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-switchdelegate.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-custom.png
new file mode 100644
index 0000000000..8c8e4accd8
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-explicit.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-explicit.png
new file mode 100644
index 0000000000..b1de5f715e
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-explicit.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-flickable.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-flickable.png
new file mode 100644
index 0000000000..0c253f82d5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-flickable.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-wireframe.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-wireframe.png
new file mode 100644
index 0000000000..35a64ae285
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar-wireframe.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.gif b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.gif
new file mode 100644
index 0000000000..31db1f9e7c
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.png
new file mode 100644
index 0000000000..9f113497db
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbar.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tabbutton.png b/src/quickcontrols/doc/images/qtquickcontrols2-tabbutton.png
new file mode 100644
index 0000000000..3df2f53147
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tabbutton.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textarea-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-textarea-custom.png
new file mode 100644
index 0000000000..6220a13f39
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textarea-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textarea-scrollable.png b/src/quickcontrols/doc/images/qtquickcontrols2-textarea-scrollable.png
new file mode 100644
index 0000000000..ae868a27da
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textarea-scrollable.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textarea.png b/src/quickcontrols/doc/images/qtquickcontrols2-textarea.png
new file mode 100644
index 0000000000..fc221bd757
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textarea.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textfield-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-custom.png
new file mode 100644
index 0000000000..9102317065
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textfield-disabled.png b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-disabled.png
new file mode 100644
index 0000000000..b143d21053
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-disabled.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textfield-focused.png b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-focused.png
new file mode 100644
index 0000000000..de7f9599c9
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-focused.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textfield-normal.png b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-normal.png
new file mode 100644
index 0000000000..4229c706ad
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textfield-normal.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-textfield.png b/src/quickcontrols/doc/images/qtquickcontrols2-textfield.png
new file mode 100644
index 0000000000..a008383a00
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-textfield.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolbar-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolbar-custom.png
new file mode 100644
index 0000000000..425e5f8c64
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolbar-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolbar.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolbar.png
new file mode 100644
index 0000000000..e5a33eee9a
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolbar.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton-custom.png
new file mode 100644
index 0000000000..b78269d087
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton.png
new file mode 100644
index 0000000000..610c1a7cb4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolbutton.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator-custom.png
new file mode 100644
index 0000000000..6703eeba53
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator.png b/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator.png
new file mode 100644
index 0000000000..88ced12361
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-toolseparator.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-delay.png b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-delay.png
new file mode 100644
index 0000000000..59813835b4
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-delay.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-hover.png b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-hover.png
new file mode 100644
index 0000000000..62a9cf844b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-hover.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-pressandhold.png b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-pressandhold.png
new file mode 100644
index 0000000000..62a9cf844b
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-pressandhold.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-slider.png b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-slider.png
new file mode 100644
index 0000000000..a15e723a02
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip-slider.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tooltip.png b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip.png
new file mode 100644
index 0000000000..4238d52a77
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tooltip.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-treeviewdelegate.png b/src/quickcontrols/doc/images/qtquickcontrols2-treeviewdelegate.png
new file mode 100644
index 0000000000..4d1e74f5dd
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-treeviewdelegate.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-custom.png b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-custom.png
new file mode 100644
index 0000000000..bbfa9b0cef
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-custom.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-delegate.png b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-delegate.png
new file mode 100644
index 0000000000..a28da93e46
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-delegate.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-wrap.gif b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-wrap.gif
new file mode 100644
index 0000000000..8f59eedcc7
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler-wrap.gif
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-tumbler.png b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler.png
new file mode 100644
index 0000000000..38339dfa25
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-tumbler.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-accent.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-accent.png
new file mode 100644
index 0000000000..e1d74f7a91
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-accent.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-attributes.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-attributes.png
new file mode 100644
index 0000000000..7a7ef347fc
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-attributes.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-background.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-background.png
new file mode 100644
index 0000000000..4f1bfbd284
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-background.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-button.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-button.png
new file mode 100644
index 0000000000..6c764ec97e
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-button.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-dark.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-dark.png
new file mode 100644
index 0000000000..952651dca0
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-dark.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-foreground.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-foreground.png
new file mode 100644
index 0000000000..b0ecf23a9e
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-foreground.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-light.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-light.png
new file mode 100644
index 0000000000..e65447a4c5
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-light.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-theme.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-theme.png
new file mode 100644
index 0000000000..d128134636
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-theme.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-thumbnail.png
new file mode 100644
index 0000000000..db7fe5b076
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-universal-violet.png b/src/quickcontrols/doc/images/qtquickcontrols2-universal-violet.png
new file mode 100644
index 0000000000..ec459457a8
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-universal-violet.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn-layout.png b/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn-layout.png
new file mode 100644
index 0000000000..19fbeefd49
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn-layout.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn.png b/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn.png
new file mode 100644
index 0000000000..a73cccd544
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-weeknumbercolumn.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-windows-thumbnail.png b/src/quickcontrols/doc/images/qtquickcontrols2-windows-thumbnail.png
new file mode 100644
index 0000000000..15408d3bba
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-windows-thumbnail.png
Binary files differ
diff --git a/src/quickcontrols/doc/images/qtquickcontrols2-windows.png b/src/quickcontrols/doc/images/qtquickcontrols2-windows.png
new file mode 100644
index 0000000000..324a03412d
--- /dev/null
+++ b/src/quickcontrols/doc/images/qtquickcontrols2-windows.png
Binary files differ
diff --git a/src/quickcontrols/doc/manifest-meta.qdocconf b/src/quickcontrols/doc/manifest-meta.qdocconf
new file mode 100644
index 0000000000..5626aca067
--- /dev/null
+++ b/src/quickcontrols/doc/manifest-meta.qdocconf
@@ -0,0 +1,32 @@
+# Additional meta information (attributes for matched entries, as well as tags)
+# to be added to manifest.xml files.
+#
+# manifestmeta.filters = <filter1>,<filter2>,...
+#
+# manifestmeta.<filter>.names = <Module1>/<name1>,<Module2>/<name2>,..
+# manifestmeta.<filter>.attributes = <attribute1:value1>,<attribute2:value2>,..
+# manifestmeta.<filter>.tags = <tag1>,<tag2>,..
+#
+# <filter>.names specify all the module/name combinations to apply the
+# attributes/tags to. You can use simple wildcard matching by appending
+# '*' at the end of name.
+#
+# Note: You cannot use operators (+, =, -) in the names.
+#
+# Examples: add a 'isHighlighted' attribute for two 'Analog Clock' examples,
+# add a 'database' tag for QtSql examples, and a 'qt5' tag for all examples
+#
+# manifestmeta.filters = highlighted sql global
+#
+# manifestmeta.highlighted.names = "QtGui/Analog Clock Window Example" \
+# "QtWidgets/Analog Clock Example"
+# manifestmeta.highlighted.attributes = isHighlighted:true
+#
+# manifestmeta.sql.names = "QtSql/*"
+# manifestmeta.sql.tags = database
+#
+# manifestmeta.global.names = *
+# manifestmeta.global.tags = qt5
+
+manifestmeta.highlighted.names = "QtQuickControls/Qt Quick Controls - Gallery" \
+ "QtQuickControls/Qt Quick Controls - Text Editor"
diff --git a/src/quickcontrols/doc/qtquickcontrols.qdocconf b/src/quickcontrols/doc/qtquickcontrols.qdocconf
new file mode 100644
index 0000000000..285141b14b
--- /dev/null
+++ b/src/quickcontrols/doc/qtquickcontrols.qdocconf
@@ -0,0 +1,104 @@
+include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
+include($QT_INSTALL_DOCS/config/exampleurl-qtquickcontrols2.qdocconf)
+include(manifest-meta.qdocconf)
+
+moduleheader = QtQuickControls2
+
+project = QtQuickControls
+description = Qt Quick Controls Reference Documentation
+version = $QT_VERSION
+
+qhp.projects = QtQuickControls
+
+qhp.QtQuickControls.file = qtquickcontrols.qhp
+qhp.QtQuickControls.namespace = org.qt-project.qtquickcontrols.$QT_VERSION_TAG
+qhp.QtQuickControls.virtualFolder = qtquickcontrols
+qhp.QtQuickControls.indexTitle = Qt Quick Controls
+qhp.QtQuickControls.indexRoot =
+
+qhp.QtQuickControls.subprojects = qmltypes classes examples
+qhp.QtQuickControls.subprojects.qmltypes.title = QML Types
+qhp.QtQuickControls.subprojects.qmltypes.indexTitle = Qt Quick Controls QML Types
+qhp.QtQuickControls.subprojects.qmltypes.selectors = qmlclass
+qhp.QtQuickControls.subprojects.qmltypes.sortPages = true
+qhp.QtQuickControls.subprojects.classes.title = C++ Classes
+qhp.QtQuickControls.subprojects.classes.indexTitle = Qt Quick Controls C++ Classes
+qhp.QtQuickControls.subprojects.classes.selectors = class fake:headerfile
+qhp.QtQuickControls.subprojects.classes.sortPages = true
+qhp.QtQuickControls.subprojects.examples.title = Examples
+qhp.QtQuickControls.subprojects.examples.indexTitle = Qt Quick Controls Examples
+qhp.QtQuickControls.subprojects.examples.selectors = fake:example
+
+depends = qtcore qtgui qtdoc qtqml qtqmlmodels qtquick qtsql qtwidgets qtlabsplatform qmake qtcmake
+
+# Specify the install path under QT_INSTALL_EXAMPLES
+# Note: paths passed to \example command must contain the parent directory, e.g.
+# \example controls/tabs
+exampledirs += ../../../examples/quickcontrols2 \
+ ../../quicktemplates2 \
+ ../ \
+ snippets
+
+examples.fileextensions += "*.conf"
+
+examplesinstallpath = quickcontrols2
+
+headerdirs += ../../quicktemplates2 \
+ ..
+
+sourcedirs += ../../quicktemplates2 \
+ .. \
+ ../../quicktemplates2/doc/src \
+ src
+
+# Exclude .qml files from the doc build to prevent conflicts with .qml files
+# in style-specific directories; all types are documented in .cpp/.qdoc files
+sources.fileextensions = "*.c++ *.cc *.cpp *.cxx *.mm *.qdoc"
+
+imagedirs += images \
+ ..
+
+navigation.landingpage = "Qt Quick Controls"
+navigation.qmltypespage = "Qt Quick Controls QML Types"
+navigation.cppclassespage = "Qt Quick Controls C++ Classes"
+
+tagfile = qtquickcontrols.tags
+
+# \styleimport {QtQuick.Controls.Universal 2.0}
+macro.styleimport.HTML = "<table class=\"alignedsummary\"><tbody><tr><td class=\"memItemLeft rightAlign topAlign\"> Import Statement:</td><td class=\"memItemRight bottomAlign\"> import \1</td></tr><tr><td class=\"memItemLeft rightAlign topAlign\"> Since:</td><td class=\"memItemRight bottomAlign\"> \2</td></tr></tbody></table>"
+
+# \styleproperty {Universal.accent} {enumeration} {html-target-id}
+# \target html-target-id
+# This property holds ...
+# (empty line)
+# \endstyleproperty
+macro.styleproperty.HTML = "<div class=\"qmlproto\"><table class=\"qmlname\"><tbody><tr valign=\"top\" class=\"odd\" id=\"\3\"><td class=\"tblQmlPropNode\"><p><span class=\"name\">\1</span> : <span class=\"type\">\2</span></p></td></tr></tbody></table></div>"
+macro.endstyleproperty = "\\br"
+
+# \stylemethod {returntype} {methodname} {argtype} {argname} {html-target-id}
+# \target html-target-id
+# This property holds ...
+# (empty line)
+# \endstylemethod
+macro.stylemethod.HTML = "<div class=\"qmlproto\"><table class=\"qmlname\"><tbody><tr valign=\"top\" class=\"odd\" id=\"\5\"><td class=\"tblQmlFuncNode\"><p><span class=\"type\">\1</span> <span class=\"name\">\2</span>(<span class="type">\3</span> <i>\4</i>)</p></td></tr></tbody></table></div>"
+macro.endstylemethod = "\\br"
+
+# \stylemethod2 {returntype} {methodname} {arg1type} {arg1name} {arg2type} {arg2name} {html-target-id}
+# \target html-target-id
+# This method returns ...
+# (empty line)
+# \endstylemethod2
+macro.stylemethod2.HTML = "<div class=\"qmlproto\"><table class=\"qmlname\"><tbody><tr valign=\"top\" class=\"odd\" id=\"\7\"><td class=\"tblQmlFuncNode\"><p><span class=\"type\">\1</span> <span class=\"name\">\2</span>(<span class="type">\3</span> <i>\4</i>, <span class="type">\5</span> <i>\6</i>)</p></td></tr></tbody></table></div>"
+macro.endstylemethod2 = "\\br"
+
+# \stylecolor {#6A00FF} {(default)}
+macro.stylecolor.HTML = "<div style=\"padding:10px;color:#fff;background:\1;\">\1 \2</div>"
+
+macro.nbsp.HTML = "&nbsp;"
+
+#Add output suffix to the html filenames
+outputsuffixes = QML
+outputsuffixes.QML = 2
+
+# Fail the documentation build if there are more warnings than the limit
+warninglimit = 0
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-action.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-action.qml
new file mode 100644
index 0000000000..4f50ba46d7
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-action.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ //! [action]
+ Action {
+ id: copyAction
+ text: qsTr("&Copy")
+ icon.name: "edit-copy"
+ shortcut: StandardKey.Copy
+ onTriggered: window.activeFocusItem.copy()
+ }
+ //! [action]
+
+ //! [toolbutton]
+ ToolButton {
+ id: toolButton
+ action: copyAction
+ }
+ //! [toolbutton]
+
+ //! [menuitem]
+ MenuItem {
+ id: menuItem
+ action: copyAction
+ text: qsTr("&Copy selected Text")
+ }
+ //! [menuitem]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-busyindicator-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-busyindicator-custom.qml
new file mode 100644
index 0000000000..3eefb11110
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-busyindicator-custom.qml
@@ -0,0 +1,68 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+BusyIndicator {
+ id: control
+
+ contentItem: Item {
+ implicitWidth: 64
+ implicitHeight: 64
+
+ Item {
+ id: item
+ x: parent.width / 2 - 32
+ y: parent.height / 2 - 32
+ width: 64
+ height: 64
+ opacity: control.running ? 1 : 0
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 250
+ }
+ }
+
+ RotationAnimator {
+ target: item
+ running: control.visible && control.running
+ from: 0
+ to: 360
+ loops: Animation.Infinite
+ duration: 1250
+ }
+
+ Repeater {
+ id: repeater
+ model: 6
+
+ Rectangle {
+ id: delegate
+ x: item.width / 2 - width / 2
+ y: item.height / 2 - height / 2
+ implicitWidth: 10
+ implicitHeight: 10
+ radius: 5
+ color: "#21be2b"
+
+ required property int index
+
+ transform: [
+ Translate {
+ y: -Math.min(item.width, item.height) * 0.5 + 5
+ },
+ Rotation {
+ angle: delegate.index / repeater.count * 360
+ origin.x: 5
+ origin.y: 5
+ }
+ ]
+ }
+ }
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-button-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-custom.qml
new file mode 100644
index 0000000000..cf197a18ae
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-custom.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ id: control
+ text: qsTr("Button")
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ border.color: control.down ? "#17a81a" : "#21be2b"
+ border.width: 1
+ radius: 2
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-button-icononly.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-icononly.qml
new file mode 100644
index 0000000000..027ecb4ed8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-icononly.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+ display: Button.IconOnly
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textbesideicon.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textbesideicon.qml
new file mode 100644
index 0000000000..c2dce1d99a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textbesideicon.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ text: "Button"
+ icon.source: "qrc:/qt-project.org/imports/QtQuick/Controls/Basic/images/check.png"
+ display: Button.TextBesideIcon
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textonly.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textonly.qml
new file mode 100644
index 0000000000..4b12b8acc2
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-button-textonly.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Button {
+ text: "Button"
+ display: Button.TextOnly
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-calendarmodel.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-calendarmodel.qml
new file mode 100644
index 0000000000..af2777b123
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-calendarmodel.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+ListView {
+ id: listview
+
+ width: 200; height: 200
+ snapMode: ListView.SnapOneItem
+ orientation: ListView.Horizontal
+ highlightRangeMode: ListView.StrictlyEnforceRange
+
+ model: CalendarModel {
+ from: new Date(2015, 0, 1)
+ to: new Date(2015, 11, 31)
+ }
+
+ delegate: MonthGrid {
+ width: listview.width
+ height: listview.height
+
+ month: model.month
+ year: model.year
+ locale: Qt.locale("en_US")
+ }
+
+ ScrollIndicator.horizontal: ScrollIndicator { }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-custom.qml
new file mode 100644
index 0000000000..a7421af39c
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-custom.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+CheckBox {
+ id: control
+ text: qsTr("CheckBox")
+ checked: true
+
+ indicator: Rectangle {
+ implicitWidth: 26
+ implicitHeight: 26
+ x: control.leftPadding
+ y: parent.height / 2 - height / 2
+ radius: 3
+ border.color: control.down ? "#17a81a" : "#21be2b"
+
+ Rectangle {
+ width: 14
+ height: 14
+ x: 6
+ y: 6
+ radius: 2
+ color: control.down ? "#17a81a" : "#21be2b"
+ visible: control.checked
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: control.indicator.width + control.spacing
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-group.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-group.qml
new file mode 100644
index 0000000000..0d676be397
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkbox-group.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+Column {
+ ButtonGroup {
+ id: childGroup
+ exclusive: false
+ checkState: parentBox.checkState
+ }
+
+ CheckBox {
+ id: parentBox
+ text: qsTr("Parent")
+ checkState: childGroup.checkState
+ }
+
+ CheckBox {
+ checked: true
+ text: qsTr("Child 1")
+ leftPadding: indicator.width
+ ButtonGroup.group: childGroup
+ }
+
+ CheckBox {
+ text: qsTr("Child 2")
+ leftPadding: indicator.width
+ ButtonGroup.group: childGroup
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml
new file mode 100644
index 0000000000..a4f4b84d18
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-checkdelegate-custom.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+CheckDelegate {
+ id: control
+ text: qsTr("CheckDelegate")
+ checked: true
+
+ contentItem: Text {
+ rightPadding: control.indicator.width + control.spacing
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ indicator: Rectangle {
+ implicitWidth: 26
+ implicitHeight: 26
+ x: control.width - width - control.rightPadding
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ radius: 3
+ color: "transparent"
+ border.color: control.down ? "#17a81a" : "#21be2b"
+
+ Rectangle {
+ width: 14
+ height: 14
+ x: 6
+ y: 6
+ radius: 2
+ color: control.down ? "#17a81a" : "#21be2b"
+ visible: control.checked
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? "#bdbebf" : "#eeeeee"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-accepted.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-accepted.qml
new file mode 100644
index 0000000000..6f5eff6b55
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-accepted.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [combobox]
+ComboBox {
+ editable: true
+ model: ListModel {
+ id: model
+ ListElement { text: "Banana" }
+ ListElement { text: "Apple" }
+ ListElement { text: "Coconut" }
+ }
+ onAccepted: {
+ if (find(editText) === -1)
+ model.append({text: editText})
+ }
+}
+//! [combobox]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-custom.qml
new file mode 100644
index 0000000000..2481f6dcf8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-custom.qml
@@ -0,0 +1,90 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ComboBox {
+ id: control
+ model: ["First", "Second", "Third"]
+
+ delegate: ItemDelegate {
+ width: control.width
+ contentItem: Text {
+ text: control.textRole
+ ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole])
+ : modelData
+ color: "#21be2b"
+ font: control.font
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+ highlighted: control.highlightedIndex === index
+ }
+
+ indicator: Canvas {
+ id: canvas
+ x: control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: 12
+ height: 8
+ contextType: "2d"
+
+ Connections {
+ target: control
+ function onPressedChanged() { canvas.requestPaint(); }
+ }
+
+ onPaint: {
+ context.reset();
+ context.moveTo(0, 0);
+ context.lineTo(width, 0);
+ context.lineTo(width / 2, height);
+ context.closePath();
+ context.fillStyle = control.pressed ? "#17a81a" : "#21be2b";
+ context.fill();
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: 0
+ rightPadding: control.indicator.width + control.spacing
+
+ text: control.displayText
+ font: control.font
+ color: control.pressed ? "#17a81a" : "#21be2b"
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: 40
+ border.color: control.pressed ? "#17a81a" : "#21be2b"
+ border.width: control.visualFocus ? 2 : 1
+ radius: 2
+ }
+
+ popup: Popup {
+ y: control.height - 1
+ width: control.width
+ implicitHeight: contentItem.implicitHeight
+ padding: 1
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.popup.visible ? control.delegateModel : null
+ currentIndex: control.highlightedIndex
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ border.color: "#21be2b"
+ radius: 2
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-find.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-find.qml
new file mode 100644
index 0000000000..2513002264
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-find.qml
@@ -0,0 +1,16 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [find]
+ComboBox {
+ model: ListModel {
+ ListElement { text: "Banana" }
+ ListElement { text: "Apple" }
+ ListElement { text: "Coconut" }
+ }
+ Component.onCompleted: currentIndex = find("Coconut")
+}
+//! [find]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-popup.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-popup.qml
new file mode 100644
index 0000000000..8c636a3d5c
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-popup.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick.Controls
+
+ComboBox {
+//! [closePolicy]
+ popup.closePolicy: Popup.CloseOnEscape
+//! [closePolicy]
+//! [modal]
+ popup.modal: true
+//! [modal]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-textat.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-textat.qml
new file mode 100644
index 0000000000..8910ba3237
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-textat.qml
@@ -0,0 +1,16 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [textat]
+ComboBox {
+ model: ListModel {
+ ListElement { text: "Banana" }
+ ListElement { text: "Apple" }
+ ListElement { text: "Coconut" }
+ }
+ onActivated: (index) => { print(textAt(index)) }
+}
+//! [textat]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-valuerole.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-valuerole.qml
new file mode 100644
index 0000000000..8d32201799
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-combobox-valuerole.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2019 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [file]
+ApplicationWindow {
+ width: 640
+ height: 480
+ visible: true
+
+ // Used as an example of a backend - this would usually be
+ // e.g. a C++ type exposed to QML.
+ QtObject {
+ id: backend
+ property int modifier
+ }
+
+ ComboBox {
+ textRole: "text"
+ valueRole: "value"
+ // When an item is selected, update the backend.
+ onActivated: backend.modifier = currentValue
+ // Set the initial currentIndex to the value stored in the backend.
+ Component.onCompleted: currentIndex = indexOfValue(backend.modifier)
+ model: [
+ { value: Qt.NoModifier, text: qsTr("No modifier") },
+ { value: Qt.ShiftModifier, text: qsTr("Shift") },
+ { value: Qt.ControlModifier, text: qsTr("Control") }
+ ]
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow-layout.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow-layout.qml
new file mode 100644
index 0000000000..2358f252e0
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow-layout.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+//! [1]
+ColumnLayout {
+ DayOfWeekRow {
+ locale: grid.locale
+ Layout.fillWidth: true
+ }
+
+ MonthGrid {
+ id: grid
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("en_US")
+ Layout.fillWidth: true
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow.qml
new file mode 100644
index 0000000000..2188b4ccf1
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dayofweekrow.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+DayOfWeekRow {
+ locale: Qt.locale("en_US")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-delaybutton-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-delaybutton-custom.qml
new file mode 100644
index 0000000000..a8b17ab36a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-delaybutton-custom.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+DelayButton {
+ id: control
+ checked: true
+ text: qsTr("Delay\nButton")
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 100
+ opacity: enabled ? 1 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ radius: size / 2
+
+ readonly property real size: Math.min(control.width, control.height)
+ width: size
+ height: size
+ anchors.centerIn: parent
+
+ Canvas {
+ id: canvas
+ anchors.fill: parent
+
+ Connections {
+ target: control
+ function onProgressChanged() { canvas.requestPaint(); }
+ }
+
+ onPaint: {
+ var ctx = getContext("2d")
+ ctx.clearRect(0, 0, width, height)
+ ctx.strokeStyle = "white"
+ ctx.lineWidth = parent.size / 20
+ ctx.beginPath()
+ var startAngle = Math.PI / 5 * 3
+ var endAngle = startAngle + control.progress * Math.PI / 5 * 9
+ ctx.arc(width / 2, height / 2, width / 2 - ctx.lineWidth / 2 - 2, startAngle, endAngle)
+ ctx.stroke()
+ }
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dial-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dial-custom.qml
new file mode 100644
index 0000000000..f1efc22c4d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dial-custom.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Dial {
+ id: control
+ background: Rectangle {
+ x: control.width / 2 - width / 2
+ y: control.height / 2 - height / 2
+ width: Math.max(64, Math.min(control.width, control.height))
+ height: width
+ color: "transparent"
+ radius: width / 2
+ border.color: control.pressed ? "#17a81a" : "#21be2b"
+ opacity: control.enabled ? 1 : 0.3
+ }
+
+ handle: Rectangle {
+ id: handleItem
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+ width: 16
+ height: 16
+ color: control.pressed ? "#17a81a" : "#21be2b"
+ radius: 8
+ antialiasing: true
+ opacity: control.enabled ? 1 : 0.3
+ transform: [
+ Translate {
+ y: -Math.min(control.background.width, control.background.height) * 0.4 + handleItem.height / 2
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: handleItem.width / 2
+ origin.y: handleItem.height / 2
+ }
+ ]
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modal.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modal.qml
new file mode 100644
index 0000000000..ba1580a4df
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modal.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: dialog.implicitWidth
+ height: dialog.implicitHeight
+//! [1]
+Dialog {
+ id: dialog
+ modal: true
+ standardButtons: Dialog.Ok
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modeless.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modeless.qml
new file mode 100644
index 0000000000..d70c9921e2
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog-modeless.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: dialog.implicitWidth
+ height: dialog.implicitHeight
+//! [1]
+Dialog {
+ id: dialog
+ modal: false
+ standardButtons: Dialog.Ok
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog.qml
new file mode 100644
index 0000000000..4d774c4e10
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialog.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: dialog.implicitWidth
+ height: dialog.implicitHeight
+//! [1]
+Dialog {
+ id: dialog
+ title: "Title"
+ standardButtons: Dialog.Ok | Dialog.Cancel
+
+ onAccepted: console.log("Ok clicked")
+ onRejected: console.log("Cancel clicked")
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml
new file mode 100644
index 0000000000..ef85771bfd
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox-attached.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+DialogButtonBox {
+ Button {
+ text: qsTr("Save")
+ DialogButtonBox.buttonRole: DialogButtonBox.AcceptRole
+ }
+ Button {
+ text: qsTr("Close")
+ DialogButtonBox.buttonRole: DialogButtonBox.DestructiveRole
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml
new file mode 100644
index 0000000000..13a927520f
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-dialogbuttonbox.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+DialogButtonBox {
+ standardButtons: DialogButtonBox.Ok | DialogButtonBox.Cancel
+
+ onAccepted: console.log("Ok clicked")
+ onRejected: console.log("Cancel clicked")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-frame-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-frame-custom.qml
new file mode 100644
index 0000000000..de3e1a2327
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-frame-custom.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Frame {
+ background: Rectangle {
+ color: "transparent"
+ border.color: "#21be2b"
+ radius: 2
+ }
+
+ Label {
+ text: qsTr("Content goes here!")
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-frame.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-frame.qml
new file mode 100644
index 0000000000..fcb128db54
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-frame.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+//! [1]
+Frame {
+ ColumnLayout {
+ anchors.fill: parent
+ CheckBox { text: qsTr("E-mail") }
+ CheckBox { text: qsTr("Calendar") }
+ CheckBox { text: qsTr("Contacts") }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-checkable.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-checkable.qml
new file mode 100644
index 0000000000..0ab0822aca
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-checkable.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+//! [1]
+GroupBox {
+ label: CheckBox {
+ id: checkBox
+ checked: true
+ text: qsTr("Synchronize")
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+ enabled: checkBox.checked
+ CheckBox { text: qsTr("E-mail") }
+ CheckBox { text: qsTr("Calendar") }
+ CheckBox { text: qsTr("Contacts") }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-custom.qml
new file mode 100644
index 0000000000..34d9df8a63
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox-custom.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+GroupBox {
+ id: control
+ title: qsTr("GroupBox")
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+ color: "transparent"
+ border.color: "#21be2b"
+ radius: 2
+ }
+
+ label: Label {
+ x: control.leftPadding
+ width: control.availableWidth
+ text: control.title
+ color: "#21be2b"
+ elide: Text.ElideRight
+ }
+
+ Label {
+ text: qsTr("Content goes here!")
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox.qml
new file mode 100644
index 0000000000..98282ed348
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-groupbox.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+//! [1]
+GroupBox {
+ title: qsTr("Synchronize")
+ ColumnLayout {
+ anchors.fill: parent
+ CheckBox { text: qsTr("E-mail") }
+ CheckBox { text: qsTr("Calendar") }
+ CheckBox { text: qsTr("Contacts") }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-headerview-simple.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-headerview-simple.qml
new file mode 100644
index 0000000000..6f2e5fac45
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-headerview-simple.qml
@@ -0,0 +1,72 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+//![file]
+import QtQuick
+import QtQuick.Controls
+import Qt.labs.qmlmodels
+
+ApplicationWindow {
+ visible: true
+ width: 640
+ height: 480
+
+ //! [horizontal]
+ HorizontalHeaderView {
+ id: horizontalHeader
+ syncView: tableView
+ anchors.left: tableView.left
+ }
+ //! [horizontal]
+
+ //! [vertical]
+ VerticalHeaderView {
+ id: verticalHeader
+ syncView: tableView
+ anchors.top: tableView.top
+ }
+ //! [vertical]
+
+ TableView {
+ id: tableView
+ anchors.fill: parent
+ anchors.topMargin: horizontalHeader.height
+ anchors.leftMargin: verticalHeader.width
+ columnSpacing: 1
+ rowSpacing: 1
+ clip: true
+
+ model: TableModel {
+ TableModelColumn { display: "name" }
+ TableModelColumn { display: "color" }
+
+ rows: [
+ {
+ "name": "cat",
+ "color": "black"
+ },
+ {
+ "name": "dog",
+ "color": "brown"
+ },
+ {
+ "name": "bird",
+ "color": "white"
+ }
+ ]
+ }
+
+ delegate: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 50
+ border.width: 1
+
+ Text {
+ text: display
+ anchors.centerIn: parent
+ }
+ }
+ }
+}
+
+//![file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml
new file mode 100644
index 0000000000..3212cbc762
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate-custom.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ItemDelegate {
+ id: control
+ text: qsTr("ItemDelegate")
+
+ contentItem: Text {
+ rightPadding: control.spacing
+ text: control.text
+ font: control.font
+ color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf"
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ color: control.down ? "#dddedf" : "#eeeeee"
+
+ Rectangle {
+ width: parent.width
+ height: 1
+ color: control.down ? "#17a81a" : "#21be2b"
+ anchors.bottom: parent.bottom
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate.qml
new file mode 100644
index 0000000000..49c12b1dff
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-itemdelegate.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+ListView {
+ width: 160
+ height: 240
+
+ model: Qt.fontFamilies()
+
+ delegate: ItemDelegate {
+ text: modelData
+ width: parent.width
+ onClicked: console.log("clicked:", modelData)
+
+ required property string modelData
+ }
+
+ ScrollIndicator.vertical: ScrollIndicator { }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-label-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-label-custom.qml
new file mode 100644
index 0000000000..79bc9d3c13
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-label-custom.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Label {
+ text: qsTr("Label")
+ color: "#21be2b"
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-label.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-label.qml
new file mode 100644
index 0000000000..7ca63d0251
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-label.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+Label {
+ text: "Label"
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-accent.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-accent.qml
new file mode 100644
index 0000000000..71a84fac82
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-accent.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Pane {
+ padding: 4
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ highlighted: true
+ Material.accent: Material.Orange
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-background.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-background.qml
new file mode 100644
index 0000000000..f9f1dd0915
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-background.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Pane {
+ padding: 4
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ highlighted: true
+ Material.background: Material.Teal
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-elevation.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-elevation.qml
new file mode 100644
index 0000000000..4f8b27e7ef
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-elevation.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Pane {
+ contentWidth: 120
+ contentHeight: 120
+ padding: 10
+ bottomPadding: 20
+
+//! [1]
+Pane {
+ width: 120
+ height: 120
+
+ Material.elevation: 6
+
+ Label {
+ text: qsTr("I'm a card!")
+ anchors.centerIn: parent
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-foreground.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-foreground.qml
new file mode 100644
index 0000000000..b4a7743c16
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-foreground.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Pane {
+ padding: 4
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ Material.foreground: Material.Pink
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-theme.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-theme.qml
new file mode 100644
index 0000000000..4e5bf81cd9
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-theme.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+
+Pane {
+ padding: 10
+
+//! [1]
+Pane {
+ Material.theme: Material.Dark
+
+ Button {
+ text: qsTr("Button")
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-material-variant.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-variant.qml
new file mode 100644
index 0000000000..ad824f1e34
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-material-variant.qml
@@ -0,0 +1,189 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Material
+import QtQuick.Layouts
+
+Pane {
+ id: root
+ implicitWidth: 400
+ implicitHeight: 600
+ padding: 10
+
+ readonly property color measurementColor: "darkorange"
+ readonly property int barLeftMargin: 10
+ readonly property int textTopMargin: 12
+
+ Component {
+ id: measurementComponent
+
+ Rectangle {
+ color: root.measurementColor
+ width: 1
+ height: parent.height
+
+ Rectangle {
+ width: 5
+ height: 1
+ color: root.measurementColor
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Rectangle {
+ width: 5
+ height: 1
+ color: root.measurementColor
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: parent.bottom
+ }
+
+ Text {
+ x: 8
+ text: parent.height
+ height: parent.height
+ color: root.measurementColor
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ }
+
+ ColumnLayout {
+ anchors.fill: parent
+ spacing: 20
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ Button {
+ id: button
+ text: qsTr("Button")
+
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+
+ }
+ Text {
+ text: "Roboto " + button.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ ItemDelegate {
+ id: itemDelegate
+ text: qsTr("ItemDelegate")
+
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+
+ }
+ Text {
+ text: "Roboto " + itemDelegate.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ CheckDelegate {
+ id: checkDelegate
+ text: qsTr("CheckDelegate")
+
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+
+ }
+ Text {
+ text: "Roboto " + checkDelegate.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ RadioDelegate {
+ id: radioDelegate
+ text: qsTr("RadioDelegate")
+
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+
+ }
+ Text {
+ text: "Roboto " + radioDelegate.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ ComboBox {
+ id: comboBox
+ model: [ qsTr("ComboBox") ]
+
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+
+ }
+ Text {
+ text: "Roboto " + comboBox.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ ColumnLayout {
+ spacing: root.textTopMargin
+
+ Item {
+ implicitWidth: groupBox.implicitWidth
+ implicitHeight: groupBox.implicitHeight
+
+ GroupBox {
+ id: groupBox
+ title: qsTr("GroupBox")
+ }
+ Loader {
+ sourceComponent: measurementComponent
+ height: parent.height
+ anchors.left: parent.right
+ anchors.leftMargin: root.barLeftMargin
+ }
+ }
+ Text {
+ text: "Roboto " + groupBox.font.pixelSize
+ color: root.measurementColor
+ }
+ }
+
+ Item {
+ Layout.fillHeight: true
+ }
+ }
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-custom.qml
new file mode 100644
index 0000000000..f38d5f370a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-custom.qml
@@ -0,0 +1,109 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ width: menu.width
+ height: menu.height
+ visible: true
+
+ Component.onCompleted: menu.popup(menu.itemAt(1))
+
+// Indent it like this so that the indenting in the generated doc is normal.
+Menu {
+ id: menu
+
+ Action { text: qsTr("Tool Bar"); checkable: true }
+ Action { text: qsTr("Side Bar"); checkable: true; checked: true }
+ Action { text: qsTr("Status Bar"); checkable: true; checked: true }
+
+ MenuSeparator {
+ contentItem: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 1
+ color: "#21be2b"
+ }
+ }
+
+ Menu {
+ title: qsTr("Advanced")
+ // ...
+ }
+
+ topPadding: 2
+ bottomPadding: 2
+
+ delegate: MenuItem {
+ id: menuItem
+ implicitWidth: 200
+ implicitHeight: 40
+
+ arrow: Canvas {
+ x: parent.width - width
+ implicitWidth: 40
+ implicitHeight: 40
+ visible: menuItem.subMenu
+ onPaint: {
+ var ctx = getContext("2d")
+ ctx.fillStyle = menuItem.highlighted ? "#ffffff" : "#21be2b"
+ ctx.moveTo(15, 15)
+ ctx.lineTo(width - 15, height / 2)
+ ctx.lineTo(15, height - 15)
+ ctx.closePath()
+ ctx.fill()
+ }
+ }
+
+ indicator: Item {
+ implicitWidth: 40
+ implicitHeight: 40
+ Rectangle {
+ width: 26
+ height: 26
+ anchors.centerIn: parent
+ visible: menuItem.checkable
+ border.color: "#21be2b"
+ radius: 3
+ Rectangle {
+ width: 14
+ height: 14
+ anchors.centerIn: parent
+ visible: menuItem.checked
+ color: "#21be2b"
+ radius: 2
+ }
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: menuItem.indicator.width
+ rightPadding: menuItem.arrow.width
+ text: menuItem.text
+ font: menuItem.font
+ opacity: enabled ? 1.0 : 0.3
+ color: menuItem.highlighted ? "#ffffff" : "#21be2b"
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ color: menuItem.highlighted ? "#21be2b" : "transparent"
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ color: "#ffffff"
+ border.color: "#21be2b"
+ radius: 2
+ }
+}
+} //! [eof]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-instantiator.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-instantiator.qml
new file mode 100644
index 0000000000..cda91182df
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menu-instantiator.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: settings
+
+ // This would come from a C++ type. We add a mock implementation here to make tst_snippets pass.
+ function displayableFilePath(path) {
+ return path
+ }
+
+//! [menu]
+Menu {
+ title: qsTr("File")
+
+ Menu {
+ id: recentFilesMenu
+ title: qsTr("Recent Files")
+ enabled: recentFilesInstantiator.count > 0
+
+ Instantiator {
+ id: recentFilesInstantiator
+ model: settings.recentFiles
+ delegate: MenuItem {
+ text: settings.displayableFilePath(modelData)
+ onTriggered: loadFile(modelData)
+ }
+
+ onObjectAdded: (index, object) => recentFilesMenu.insertItem(index, object)
+ onObjectRemoved: (index, object) => recentFilesMenu.removeItem(object)
+ }
+
+ MenuSeparator {}
+
+ MenuItem {
+ text: qsTr("Clear Recent Files")
+ onTriggered: settings.clearRecentFiles()
+ }
+ }
+}
+//! [menu]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar-custom.qml
new file mode 100644
index 0000000000..2d2d15efdf
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar-custom.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ id: window
+ visible: true
+ width: menuBar.implicitWidth
+ height: menuBar.height
+
+ Component.onCompleted: menuBar.itemAt(1).highlighted = true
+
+ header:
+
+// Indent it like this so that the indenting in the generated doc is normal.
+MenuBar {
+ id: menuBar
+
+ Menu { title: qsTr("File") }
+ Menu { title: qsTr("Edit") }
+ Menu { title: qsTr("View") }
+ Menu { title: qsTr("Help") }
+
+ delegate: MenuBarItem {
+ id: menuBarItem
+
+ contentItem: Text {
+ text: menuBarItem.text
+ font: menuBarItem.font
+ opacity: enabled ? 1.0 : 0.3
+ color: menuBarItem.highlighted ? "#ffffff" : "#21be2b"
+ horizontalAlignment: Text.AlignLeft
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ opacity: enabled ? 1 : 0.3
+ color: menuBarItem.highlighted ? "#21be2b" : "transparent"
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ color: "#ffffff"
+
+ Rectangle {
+ color: "#21be2b"
+ width: parent.width
+ height: 1
+ anchors.bottom: parent.bottom
+ }
+ }
+}
+} //! [eof]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar.qml
new file mode 100644
index 0000000000..55064604b4
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menubar.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [begin]
+ApplicationWindow {
+ id: window
+ width: 320
+ height: 260
+ visible: true
+
+ //! [skipfrom]
+ Component.onCompleted: {
+ menuBar.itemAt(0).triggered()
+ menuBar.itemAt(0).menu.itemAt(2).highlighted = true
+ }
+ //! [skipto]
+
+ menuBar: MenuBar {
+ Menu {
+ title: qsTr("&File")
+ Action { text: qsTr("&New...") }
+ Action { text: qsTr("&Open...") }
+ Action { text: qsTr("&Save") }
+ Action { text: qsTr("Save &As...") }
+ MenuSeparator { }
+ Action { text: qsTr("&Quit") }
+ }
+ Menu {
+ title: qsTr("&Edit")
+ Action { text: qsTr("Cu&t") }
+ Action { text: qsTr("&Copy") }
+ Action { text: qsTr("&Paste") }
+ }
+ Menu {
+ title: qsTr("&Help")
+ Action { text: qsTr("&About") }
+ }
+ }
+}
+//! [end]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator-custom.qml
new file mode 100644
index 0000000000..2b66187e10
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator-custom.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: window
+ width: menu.contentItem.width
+ height: menu.contentItem.height
+ visible: true
+
+// Indent it like this so that the indenting in the generated doc is normal.
+Menu {
+ id: menu
+ contentItem.parent: window
+
+ MenuItem {
+ text: qsTr("New...")
+ }
+ MenuItem {
+ text: qsTr("Open...")
+ }
+ MenuItem {
+ text: qsTr("Save")
+ }
+
+ MenuSeparator {
+ padding: 0
+ topPadding: 12
+ bottomPadding: 12
+ contentItem: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 1
+ color: "#1E000000"
+ }
+ }
+
+ MenuItem {
+ text: qsTr("Exit")
+ }
+}
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator.qml
new file mode 100644
index 0000000000..6be0de85bc
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-menuseparator.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: window
+ width: menu.contentItem.width
+ height: menu.contentItem.height
+ visible: true
+
+// Indent it like this so that the indenting in the generated doc is normal.
+Menu {
+ id: menu
+ contentItem.parent: window
+
+ MenuItem {
+ text: qsTr("New...")
+ }
+ MenuItem {
+ text: qsTr("Open...")
+ }
+ MenuItem {
+ text: qsTr("Save")
+ }
+
+ MenuSeparator {}
+
+ MenuItem {
+ text: qsTr("Exit")
+ }
+}
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-layout.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-layout.qml
new file mode 100644
index 0000000000..0620ee6d0b
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-layout.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+//! [1]
+GridLayout {
+ columns: 2
+
+ DayOfWeekRow {
+ locale: grid.locale
+
+ Layout.column: 1
+ Layout.fillWidth: true
+ }
+
+ WeekNumberColumn {
+ month: grid.month
+ year: grid.year
+ locale: grid.locale
+
+ Layout.fillHeight: true
+ }
+
+ MonthGrid {
+ id: grid
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("en_US")
+
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-localization.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-localization.qml
new file mode 100644
index 0000000000..56a801ab75
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid-localization.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+pragma ComponentBehavior: Bound
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+MonthGrid {
+ id: monthGrid
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("ar")
+ delegate: Text {
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ opacity: model.month === monthGrid.month ? 1 : 0
+ text: monthGrid.locale.toString(model.date, "d")
+ font: monthGrid.font
+
+ required property var model
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid.qml
new file mode 100644
index 0000000000..c630edbe26
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-monthgrid.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+MonthGrid {
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("en_US")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modal.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modal.qml
new file mode 100644
index 0000000000..d1537d73bf
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modal.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Item {
+ id: root
+ width: 200
+ height: 200
+
+ Binding {
+ target: popup
+ property: "visible"
+ value: root.Window.active
+ }
+//! [1]
+Popup {
+ id: popup
+ width: 400
+ height: 400
+ modal: true
+ visible: true
+
+ Overlay.modal: Rectangle {
+ color: "#aacfdbe7"
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modeless.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modeless.qml
new file mode 100644
index 0000000000..06ebb16fb1
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-overlay-modeless.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Item {
+ id: root
+ width: 200
+ height: 200
+
+ Binding {
+ target: popup
+ property: "visible"
+ value: root.Window.active
+ }
+//! [1]
+Popup {
+ id: popup
+ width: 400
+ height: 400
+ dim: true
+ visible: true
+
+ Overlay.modeless: Rectangle {
+ color: "#aacfdbe7"
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-overview.cmake b/src/quickcontrols/doc/snippets/qtquickcontrols2-overview.cmake
new file mode 100644
index 0000000000..6aa63152db
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-overview.cmake
@@ -0,0 +1,7 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#! [0]
+find_package(Qt6 REQUIRED COMPONENTS QuickControls2)
+target_link_libraries(mytarget PRIVATE Qt6::QuickControls2)
+#! [0]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-custom.qml
new file mode 100644
index 0000000000..5372c41f31
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-custom.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+PageIndicator {
+ id: control
+ count: 5
+ currentIndex: 2
+
+ delegate: Rectangle {
+ implicitWidth: 8
+ implicitHeight: 8
+
+ radius: width / 2
+ color: "#21be2b"
+
+ opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45
+
+ required property int index
+
+ Behavior on opacity {
+ OpacityAnimator {
+ duration: 100
+ }
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml
new file mode 100644
index 0000000000..e3e65beb22
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator-interactive.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick.Controls
+
+Pane {
+//! [1]
+SwipeView {
+ id: view
+ currentIndex: pageIndicator.currentIndex
+ anchors.fill: parent
+
+ Page {
+ title: qsTr("Home")
+ }
+ Page {
+ title: qsTr("Discover")
+ }
+ Page {
+ title: qsTr("Activity")
+ }
+}
+
+PageIndicator {
+ id: pageIndicator
+ interactive: true
+ count: view.count
+ currentIndex: view.currentIndex
+
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator.qml
new file mode 100644
index 0000000000..6929565825
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-pageindicator.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+PageIndicator {
+ count: 5
+ currentIndex: 2
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-pane-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-pane-custom.qml
new file mode 100644
index 0000000000..96e3db1f37
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-pane-custom.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Pane {
+ background: Rectangle {
+ color: "#eeeeee"
+ }
+
+ Label {
+ text: qsTr("Content goes here!")
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-pane.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-pane.qml
new file mode 100644
index 0000000000..ed1b80d4e8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-pane.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+//! [1]
+Pane {
+ ColumnLayout {
+ anchors.fill: parent
+ CheckBox { text: qsTr("E-mail") }
+ CheckBox { text: qsTr("Calendar") }
+ CheckBox { text: qsTr("Contacts") }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-popup-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-popup-custom.qml
new file mode 100644
index 0000000000..951dfa7d52
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-popup-custom.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Window
+
+Item {
+ id: root
+ width: 200
+ height: 200
+
+ Binding {
+ target: popup
+ property: "visible"
+ value: root.Window.active
+ }
+//! [1]
+Popup {
+ id: popup
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 200
+ border.color: "#444"
+ }
+ contentItem: Column {}
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-popup.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-popup.qml
new file mode 100644
index 0000000000..5b9ec29fb2
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-popup.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+//! [centerIn]
+ApplicationWindow {
+ id: window
+ // ...
+
+ Pane {
+ // ...
+
+ Popup {
+ anchors.centerIn: Overlay.overlay
+ }
+ }
+}
+//! [centerIn]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-progressbar-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-progressbar-custom.qml
new file mode 100644
index 0000000000..7158232081
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-progressbar-custom.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ProgressBar {
+ id: control
+ value: 0.5
+ padding: 2
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 6
+ color: "#e6e6e6"
+ radius: 3
+ }
+
+ contentItem: Item {
+ implicitWidth: 200
+ implicitHeight: 4
+
+ Rectangle {
+ width: control.visualPosition * parent.width
+ height: parent.height
+ radius: 2
+ color: "#17a81a"
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-radiobutton-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-radiobutton-custom.qml
new file mode 100644
index 0000000000..929fe7e8e2
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-radiobutton-custom.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+RadioButton {
+ id: control
+ text: qsTr("RadioButton")
+ checked: true
+
+ indicator: Rectangle {
+ implicitWidth: 26
+ implicitHeight: 26
+ x: control.leftPadding
+ y: parent.height / 2 - height / 2
+ radius: 13
+ border.color: control.down ? "#17a81a" : "#21be2b"
+
+ Rectangle {
+ width: 14
+ height: 14
+ x: 6
+ y: 6
+ radius: 7
+ color: control.down ? "#17a81a" : "#21be2b"
+ visible: control.checked
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: control.indicator.width + control.spacing
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml
new file mode 100644
index 0000000000..5eb856b8b5
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-radiodelegate-custom.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+RadioDelegate {
+ id: control
+ text: qsTr("RadioDelegate")
+ checked: true
+
+ contentItem: Text {
+ rightPadding: control.indicator.width + control.spacing
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ indicator: Rectangle {
+ implicitWidth: 26
+ implicitHeight: 26
+ x: control.width - width - control.rightPadding
+ y: parent.height / 2 - height / 2
+ radius: 13
+ color: "transparent"
+ border.color: control.down ? "#17a81a" : "#21be2b"
+
+ Rectangle {
+ width: 14
+ height: 14
+ x: 6
+ y: 6
+ radius: 7
+ color: control.down ? "#17a81a" : "#21be2b"
+ visible: control.checked
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? "#bdbebf" : "#eeeeee"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-rangeslider-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-rangeslider-custom.qml
new file mode 100644
index 0000000000..81bcb0d668
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-rangeslider-custom.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+RangeSlider {
+ id: control
+ first.value: 0.25
+ second.value: 0.75
+
+ background: Rectangle {
+ x: control.leftPadding
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: control.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: "#bdbebf"
+
+ Rectangle {
+ x: control.first.visualPosition * parent.width
+ width: control.second.visualPosition * parent.width - x
+ height: parent.height
+ color: "#21be2b"
+ radius: 2
+ }
+ }
+
+ first.handle: Rectangle {
+ x: control.leftPadding + control.first.visualPosition * (control.availableWidth - width)
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: control.first.pressed ? "#f0f0f0" : "#f6f6f6"
+ border.color: "#bdbebf"
+ }
+
+ second.handle: Rectangle {
+ x: control.leftPadding + control.second.visualPosition * (control.availableWidth - width)
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: control.second.pressed ? "#f0f0f0" : "#f6f6f6"
+ border.color: "#bdbebf"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-roundbutton.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-roundbutton.qml
new file mode 100644
index 0000000000..d83e4abc32
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-roundbutton.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+RoundButton {
+ text: "\u2713" // Unicode Character 'CHECK MARK'
+ onClicked: textArea.readOnly = true
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-active.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-active.qml
new file mode 100644
index 0000000000..5292bc5499
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-active.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 100
+ height: 100
+
+ //! [1]
+ Flickable {
+ anchors.fill: parent
+
+ contentWidth: parent.width * 2
+ contentHeight: parent.height * 2
+
+ ScrollBar.horizontal: ScrollBar { id: hbar; active: vbar.active }
+ ScrollBar.vertical: ScrollBar { id: vbar; active: hbar.active }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-custom.qml
new file mode 100644
index 0000000000..2a4faede61
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-custom.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ScrollBar {
+ id: control
+ size: 0.3
+ position: 0.2
+ active: true
+ orientation: Qt.Vertical
+
+ contentItem: Rectangle {
+ implicitWidth: 6
+ implicitHeight: 100
+ radius: width / 2
+ color: control.pressed ? "#81e889" : "#c2f4c6"
+ // Hide the ScrollBar when it's not needed.
+ opacity: control.policy === ScrollBar.AlwaysOn || (control.active && control.size < 1.0) ? 0.75 : 0
+
+ // Animate the changes in opacity (default duration is 250 ms).
+ Behavior on opacity {
+ NumberAnimation {}
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml
new file mode 100644
index 0000000000..6ba505b199
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-non-attached.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 200
+
+//! [1]
+Rectangle {
+ id: frame
+ clip: true
+ width: 160
+ height: 160
+ border.color: "black"
+ anchors.centerIn: parent
+
+ Text {
+ id: content
+ text: "ABC"
+ font.pixelSize: 160
+ x: -hbar.position * width
+ y: -vbar.position * height
+ }
+
+ ScrollBar {
+ id: vbar
+ hoverEnabled: true
+ active: hovered || pressed
+ orientation: Qt.Vertical
+ size: frame.height / content.height
+ anchors.top: parent.top
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ }
+
+ ScrollBar {
+ id: hbar
+ hoverEnabled: true
+ active: hovered || pressed
+ orientation: Qt.Horizontal
+ size: frame.width / content.width
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ }
+}
+//! [1]
+
+Component.onCompleted: {
+ hbar.active = true
+ vbar.active = true
+}
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-policy.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-policy.qml
new file mode 100644
index 0000000000..7f08912e7e
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollbar-policy.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+Flickable {
+ contentHeight: 2000
+ ScrollBar.vertical: ScrollBar {
+ policy: ScrollBar.AlwaysOn
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-active.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-active.qml
new file mode 100644
index 0000000000..0f6afdfc4d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-active.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 100
+ height: 100
+
+ //! [1]
+ Flickable {
+ anchors.fill: parent
+
+ contentWidth: parent.width * 2
+ contentHeight: parent.height * 2
+
+ ScrollIndicator.horizontal: ScrollIndicator { id: hbar; active: vbar.active }
+ ScrollIndicator.vertical: ScrollIndicator { id: vbar; active: hbar.active }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml
new file mode 100644
index 0000000000..f447fd4c94
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-custom.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ScrollIndicator {
+ id: control
+ size: 0.3
+ position: 0.2
+ active: true
+ orientation: Qt.Vertical
+
+ contentItem: Rectangle {
+ implicitWidth: 2
+ implicitHeight: 100
+ color: "#c2f4c6"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml
new file mode 100644
index 0000000000..063c771f1b
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollindicator-non-attached.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 200
+
+//! [1]
+Rectangle {
+ id: frame
+ clip: true
+ width: 160
+ height: 160
+ border.color: "black"
+ anchors.centerIn: parent
+
+ Text {
+ id: content
+ text: "ABC"
+ font.pixelSize: 169
+
+ MouseArea {
+ id: mouseArea
+ drag.target: content
+ drag.minimumX: frame.width - width
+ drag.minimumY: frame.height - height
+ drag.maximumX: 0
+ drag.maximumY: 0
+ anchors.fill: content
+ }
+ }
+
+ ScrollIndicator {
+ id: verticalIndicator
+ active: mouseArea.pressed
+ orientation: Qt.Vertical
+ size: frame.height / content.height
+ position: -content.y / content.height
+ anchors { top: parent.top; right: parent.right; bottom: parent.bottom }
+ }
+
+ ScrollIndicator {
+ id: horizontalIndicator
+ active: mouseArea.pressed
+ orientation: Qt.Horizontal
+ size: frame.width / content.width
+ position: -content.x / content.width
+ anchors { left: parent.left; right: parent.right; bottom: parent.bottom }
+ }
+}
+//! [1]
+
+Component.onCompleted: {
+ horizontalIndicator.active = true;
+ verticalIndicator.active = true;
+}
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-custom.qml
new file mode 100644
index 0000000000..2f23b9fd58
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-custom.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 200
+
+ Binding {
+ target: control.ScrollBar.horizontal
+ property: "active"
+ value: true
+ }
+
+ Binding {
+ target: control.ScrollBar.vertical
+ property: "active"
+ value: true
+ }
+
+//! [file]
+ScrollView {
+ id: control
+
+ width: 200
+ height: 200
+ focus: true
+
+ Label {
+ text: "ABC"
+ font.pixelSize: 224
+ }
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.ScrollBar.vertical.active
+ }
+
+ background: Rectangle {
+ border.color: control.activeFocus ? "#21be2b" : "#bdbebf"
+ }
+}
+//! [file]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-interactive.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-interactive.qml
new file mode 100644
index 0000000000..3f7bc8eb6d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-interactive.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [file]
+ScrollView {
+ // ...
+ ScrollBar.horizontal.interactive: true
+ ScrollBar.vertical.interactive: true
+}
+//! [file]
+
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-listview.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-listview.qml
new file mode 100644
index 0000000000..053e8e395a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-listview.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: 200
+ height: 200
+
+ Binding {
+ target: root.children[0].ScrollBar.horizontal
+ property: "active"
+ value: true
+ }
+
+ Binding {
+ target: root.children[0].ScrollBar.vertical
+ property: "active"
+ value: true
+ }
+
+//! [file]
+ScrollView {
+ width: 200
+ height: 200
+
+ ListView {
+ model: 20
+ delegate: ItemDelegate {
+ text: "Item " + index
+
+ required property int index
+ }
+ }
+}
+//! [file]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-policy.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-policy.qml
new file mode 100644
index 0000000000..fa75cd14ed
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview-policy.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [file]
+ScrollView {
+ // ...
+ ScrollBar.horizontal.policy: ScrollBar.AlwaysOff
+ ScrollBar.vertical.policy: ScrollBar.AlwaysOn
+}
+//! [file]
+
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview.qml
new file mode 100644
index 0000000000..e7f1adf758
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-scrollview.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Rectangle {
+ id: root
+ width: 200
+ height: 200
+ border.color: "#ddd"
+
+ Binding {
+ target: root.children[0].ScrollBar.horizontal
+ property: "active"
+ value: true
+ }
+
+ Binding {
+ target: root.children[0].ScrollBar.vertical
+ property: "active"
+ value: true
+ }
+
+//! [file]
+ScrollView {
+ width: 200
+ height: 200
+
+ Label {
+ text: "ABC"
+ font.pixelSize: 224
+ }
+}
+//! [file]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-selectionrectangle.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-selectionrectangle.qml
new file mode 100644
index 0000000000..a53941e824
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-selectionrectangle.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQml.Models
+import Qt.labs.qmlmodels
+
+Window {
+ width: 480
+ height: 640
+ visible: true
+ visibility: Window.AutomaticVisibility
+
+//![0]
+ TableView {
+ id: tableView
+ anchors.fill: parent
+ clip: true
+
+ model: TableModel {
+ TableModelColumn { display: "name" }
+ rows: [ { "name": "Harry" }, { "name": "Hedwig" } ]
+ }
+
+ selectionModel: ItemSelectionModel {
+ model: tableView.model
+ }
+
+ delegate: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 30
+ color: selected ? "blue" : "lightgray"
+
+ required property bool selected
+
+ Text { text: display }
+ }
+ }
+
+ SelectionRectangle {
+ target: tableView
+ }
+//![0]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-slider-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-slider-custom.qml
new file mode 100644
index 0000000000..66e0bd7990
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-slider-custom.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Slider {
+ id: control
+ value: 0.5
+
+ background: Rectangle {
+ x: control.leftPadding
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 200
+ implicitHeight: 4
+ width: control.availableWidth
+ height: implicitHeight
+ radius: 2
+ color: "#bdbebf"
+
+ Rectangle {
+ width: control.visualPosition * parent.width
+ height: parent.height
+ color: "#21be2b"
+ radius: 2
+ }
+ }
+
+ handle: Rectangle {
+ x: control.leftPadding + control.visualPosition * (control.availableWidth - width)
+ y: control.topPadding + control.availableHeight / 2 - height / 2
+ implicitWidth: 26
+ implicitHeight: 26
+ radius: 13
+ color: control.pressed ? "#f0f0f0" : "#f6f6f6"
+ border.color: "#bdbebf"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-custom.qml
new file mode 100644
index 0000000000..b32106a5bd
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-custom.qml
@@ -0,0 +1,72 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+SpinBox {
+ id: control
+ value: 50
+ editable: true
+
+ contentItem: TextInput {
+ z: 2
+ text: control.textFromValue(control.value, control.locale)
+
+ font: control.font
+ color: "#21be2b"
+ selectionColor: "#21be2b"
+ selectedTextColor: "#ffffff"
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: Qt.ImhFormattedNumbersOnly
+ }
+
+ up.indicator: Rectangle {
+ x: control.mirrored ? 0 : parent.width - width
+ height: parent.height
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.up.pressed ? "#e4e4e4" : "#f6f6f6"
+ border.color: enabled ? "#21be2b" : "#bdbebf"
+
+ Text {
+ text: "+"
+ font.pixelSize: control.font.pixelSize * 2
+ color: "#21be2b"
+ anchors.fill: parent
+ fontSizeMode: Text.Fit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ down.indicator: Rectangle {
+ x: control.mirrored ? parent.width - width : 0
+ height: parent.height
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.down.pressed ? "#e4e4e4" : "#f6f6f6"
+ border.color: enabled ? "#21be2b" : "#bdbebf"
+
+ Text {
+ text: "-"
+ font.pixelSize: control.font.pixelSize * 2
+ color: "#21be2b"
+ anchors.fill: parent
+ fontSizeMode: Text.Fit
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 140
+ border.color: "#bdbebf"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-double.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-double.qml
new file mode 100644
index 0000000000..fe2dfbd722
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-double.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+SpinBox {
+ id: spinbox
+ from: 0
+ value: 110
+ to: 100 * 100
+ stepSize: 100
+ anchors.centerIn: parent
+
+ property int decimals: 2
+ property real realValue: value / 100
+
+ validator: DoubleValidator {
+ bottom: Math.min(spinbox.from, spinbox.to)
+ top: Math.max(spinbox.from, spinbox.to)
+ }
+
+ textFromValue: function(value, locale) {
+ return Number(value / 100).toLocaleString(locale, 'f', spinbox.decimals)
+ }
+
+ valueFromText: function(text, locale) {
+ return Number.fromLocaleString(locale, text) * 100
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-textual.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-textual.qml
new file mode 100644
index 0000000000..271cad0f07
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox-textual.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+SpinBox {
+ id: spinBox
+ from: 0
+ to: items.length - 1
+ value: 1 // "Medium"
+
+ property var items: ["Small", "Medium", "Large"]
+
+ validator: RegularExpressionValidator {
+ regularExpression: new RegExp("(Small|Medium|Large)", "i")
+ }
+
+ textFromValue: function(value) {
+ return items[value];
+ }
+
+ valueFromText: function(text) {
+ for (var i = 0; i < items.length; ++i) {
+ if (items[i].toLowerCase().indexOf(text.toLowerCase()) === 0)
+ return i
+ }
+ return spinBox.value
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox.qml
new file mode 100644
index 0000000000..24fac81ca6
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-spinbox.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+SpinBox {
+ value: 50
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-custom.qml
new file mode 100644
index 0000000000..0d5452c25d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-custom.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 100
+
+ //! [1]
+ SplitView {
+ id: splitView
+ anchors.fill: parent
+
+ handle: Rectangle {
+ implicitWidth: 4
+ implicitHeight: 4
+ color: SplitHandle.pressed ? "#81e889"
+ : (SplitHandle.hovered ? Qt.lighter("#c2f4c6", 1.1) : "#c2f4c6")
+ }
+
+ Rectangle {
+ implicitWidth: 150
+ color: "#444"
+ }
+ Rectangle {
+ implicitWidth: 50
+ color: "#666"
+ }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-handle-containmentmask.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-handle-containmentmask.qml
new file mode 100644
index 0000000000..f12bfe1da8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-splitview-handle-containmentmask.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 100
+
+ //! [1]
+ SplitView {
+ id: splitView
+ anchors.fill: parent
+
+ handle: Rectangle {
+ id: handleDelegate
+ implicitWidth: 4
+ implicitHeight: 4
+ color: SplitHandle.pressed ? "#81e889"
+ : (SplitHandle.hovered ? Qt.lighter("#c2f4c6", 1.1) : "#c2f4c6")
+
+ containmentMask: Item {
+ x: (handleDelegate.width - width) / 2
+ width: 64
+ height: splitView.height
+ }
+ }
+
+ Rectangle {
+ implicitWidth: 150
+ color: "#444"
+ }
+ Rectangle {
+ implicitWidth: 50
+ color: "#666"
+ }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-custom.qml
new file mode 100644
index 0000000000..381fbe6b95
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-custom.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+StackView {
+ id: control
+
+ popEnter: Transition {
+ XAnimator {
+ from: (control.mirrored ? -1 : 1) * -control.width
+ to: 0
+ duration: 400
+ easing.type: Easing.OutCubic
+ }
+ }
+
+ popExit: Transition {
+ XAnimator {
+ from: 0
+ to: (control.mirrored ? -1 : 1) * control.width
+ duration: 400
+ easing.type: Easing.OutCubic
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-visible.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-visible.qml
new file mode 100644
index 0000000000..d711a02e1a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-stackview-visible.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+StackView {
+ id: stackView
+ property real offset: 10
+ width: 100; height: 100
+
+ initialItem: Component {
+ id: page
+ Rectangle {
+ property real pos: StackView.index * stackView.offset
+ property real hue: Math.random()
+ color: Qt.hsla(hue, 0.5, 0.8, 0.6)
+ border.color: Qt.hsla(hue, 0.5, 0.5, 0.9)
+ StackView.visible: true
+ }
+ }
+
+ pushEnter: Transition {
+ id: pushEnter
+ ParallelAnimation {
+ PropertyAction { property: "x"; value: pushEnter.ViewTransition.item.pos }
+ NumberAnimation { properties: "y"; from: pushEnter.ViewTransition.item.pos + stackView.offset; to: pushEnter.ViewTransition.item.pos; duration: 400; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 400; easing.type: Easing.OutCubic }
+ }
+ }
+ popExit: Transition {
+ id: popExit
+ ParallelAnimation {
+ PropertyAction { property: "x"; value: popExit.ViewTransition.item.pos }
+ NumberAnimation { properties: "y"; from: popExit.ViewTransition.item.pos; to: popExit.ViewTransition.item.pos + stackView.offset; duration: 400; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+ }
+
+ pushExit: Transition {
+ id: pushExit
+ PropertyAction { property: "x"; value: pushExit.ViewTransition.item.pos }
+ PropertyAction { property: "y"; value: pushExit.ViewTransition.item.pos }
+ }
+ popEnter: Transition {
+ id: popEnter
+ PropertyAction { property: "x"; value: popEnter.ViewTransition.item.pos }
+ PropertyAction { property: "y"; value: popEnter.ViewTransition.item.pos }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml
new file mode 100644
index 0000000000..973511c418
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-custom.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+SwipeDelegate {
+ id: control
+ text: qsTr("SwipeDelegate")
+
+ Component {
+ id: component
+
+ Rectangle {
+ color: SwipeDelegate.pressed ? "#333" : "#444"
+ width: parent.width
+ height: parent.height
+ clip: true
+
+ Label {
+ text: qsTr("Press me!")
+ color: "#21be2b"
+ anchors.centerIn: parent
+ }
+ }
+ }
+
+ swipe.left: component
+ swipe.right: component
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ color: control.enabled ? (control.down ? "#17a81a" : "#21be2b") : "#bdbebf"
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ Behavior on x {
+ enabled: !control.down
+ NumberAnimation {
+ easing.type: Easing.InOutCubic
+ duration: 400
+ }
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml
new file mode 100644
index 0000000000..4215ea9202
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate-transition.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+SwipeDelegate {
+ swipe.transition: Transition {
+ SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate.qml
new file mode 100644
index 0000000000..fb2df4f6d3
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipedelegate.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+ListView {
+ id: listView
+ anchors.fill: parent
+ model: ListModel {
+ ListElement { sender: "Bob Bobbleton"; title: "How are you going?" }
+ ListElement { sender: "Rug Emporium"; title: "SALE! All rugs MUST go!" }
+ ListElement { sender: "Electric Co."; title: "Electricity bill 15/07/2016 overdue" }
+ ListElement { sender: "Tips"; title: "Five ways this tip will save your life" }
+ }
+ delegate: SwipeDelegate {
+ id: swipeDelegate
+ text: sender + " - " + title
+ width: listView.width
+
+ required property string sender
+ required property string title
+
+ ListView.onRemove: SequentialAnimation {
+ PropertyAction {
+ target: swipeDelegate
+ property: "ListView.delayRemove"
+ value: true
+ }
+ NumberAnimation {
+ target: swipeDelegate
+ property: "height"
+ to: 0
+ easing.type: Easing.InOutQuad
+ }
+ PropertyAction {
+ target: swipeDelegate
+ property: "ListView.delayRemove"
+ value: false
+ }
+ }
+
+ swipe.right: Label {
+ id: deleteLabel
+ text: qsTr("Delete")
+ color: "white"
+ verticalAlignment: Label.AlignVCenter
+ padding: 12
+ height: parent.height
+ anchors.right: parent.right
+
+ SwipeDelegate.onClicked: listView.model.remove(index)
+
+ required property int index
+
+ background: Rectangle {
+ color: deleteLabel.SwipeDelegate.pressed ? Qt.darker("tomato", 1.1) : "tomato"
+ }
+ }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-custom.qml
new file mode 100644
index 0000000000..e77bc9a3e8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-custom.qml
@@ -0,0 +1,15 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+SwipeView {
+ id: control
+
+ background: Rectangle {
+ color: "#eeeeee"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-indicator.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-indicator.qml
new file mode 100644
index 0000000000..1831d92b9f
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-swipeview-indicator.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 200
+ height: 320
+
+ //! [1]
+ SwipeView {
+ id: view
+
+ currentIndex: 1
+ anchors.fill: parent
+
+ Item {
+ id: firstPage
+ }
+ Item {
+ id: secondPage
+ }
+ Item {
+ id: thirdPage
+ }
+ }
+
+ PageIndicator {
+ id: indicator
+
+ count: view.count
+ currentIndex: view.currentIndex
+
+ anchors.bottom: view.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-switch-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-switch-custom.qml
new file mode 100644
index 0000000000..5ca4b96140
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-switch-custom.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Switch {
+ id: control
+ text: qsTr("Switch")
+
+ indicator: Rectangle {
+ implicitWidth: 48
+ implicitHeight: 26
+ x: control.leftPadding
+ y: parent.height / 2 - height / 2
+ radius: 13
+ color: control.checked ? "#17a81a" : "#ffffff"
+ border.color: control.checked ? "#17a81a" : "#cccccc"
+
+ Rectangle {
+ x: control.checked ? parent.width - width : 0
+ width: 26
+ height: 26
+ radius: 13
+ color: control.down ? "#cccccc" : "#ffffff"
+ border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999"
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ verticalAlignment: Text.AlignVCenter
+ leftPadding: control.indicator.width + control.spacing
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml
new file mode 100644
index 0000000000..13cc7b4402
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-switchdelegate-custom.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+SwitchDelegate {
+ id: control
+ text: qsTr("SwitchDelegate")
+ checked: true
+
+ contentItem: Text {
+ rightPadding: control.indicator.width + control.spacing
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ indicator: Rectangle {
+ implicitWidth: 48
+ implicitHeight: 26
+ x: control.width - width - control.rightPadding
+ y: parent.height / 2 - height / 2
+ radius: 13
+ color: control.checked ? "#17a81a" : "transparent"
+ border.color: control.checked ? "#17a81a" : "#cccccc"
+
+ Rectangle {
+ x: control.checked ? parent.width - width : 0
+ width: 26
+ height: 26
+ radius: 13
+ color: control.down ? "#cccccc" : "#ffffff"
+ border.color: control.checked ? (control.down ? "#17a81a" : "#21be2b") : "#999999"
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ visible: control.down || control.highlighted
+ color: control.down ? "#bdbebf" : "#eeeeee"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-custom.qml
new file mode 100644
index 0000000000..cdce972150
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-custom.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+TabBar {
+ id: control
+
+ background: Rectangle {
+ color: "#eeeeee"
+ }
+
+ TabButton {
+ text: qsTr("Home")
+ }
+ TabButton {
+ text: qsTr("Discover")
+ }
+ TabButton {
+ text: qsTr("Activity")
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-explicit.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-explicit.qml
new file mode 100644
index 0000000000..2293984e30
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-explicit.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 360
+ height: childrenRect.height
+
+//! [1]
+TabBar {
+ width: parent.width
+ TabButton {
+ text: "First"
+ width: implicitWidth
+ }
+ TabButton {
+ text: "Second"
+ width: implicitWidth
+ }
+ TabButton {
+ text: "Third"
+ width: implicitWidth
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-flickable.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-flickable.qml
new file mode 100644
index 0000000000..3851b226bd
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar-flickable.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 360
+ height: bar.height
+
+//! [1]
+TabBar {
+ id: bar
+ width: parent.width
+
+ Repeater {
+ model: ["First", "Second", "Third", "Fourth", "Fifth"]
+
+ TabButton {
+ text: modelData
+ width: Math.max(100, bar.width / 5)
+ }
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar.qml
new file mode 100644
index 0000000000..3ce32c1c50
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbar.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+Column {
+ width: 300
+
+ //! [1]
+ TabBar {
+ id: bar
+ width: parent.width
+ TabButton {
+ text: qsTr("Home")
+ }
+ TabButton {
+ text: qsTr("Discover")
+ }
+ TabButton {
+ text: qsTr("Activity")
+ }
+ }
+
+ StackLayout {
+ width: parent.width
+ currentIndex: bar.currentIndex
+ Item {
+ id: homeTab
+ }
+ Item {
+ id: discoverTab
+ }
+ Item {
+ id: activityTab
+ }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbutton.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbutton.qml
new file mode 100644
index 0000000000..c397092a8a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tabbutton.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+TabBar {
+ TabButton {
+ text: qsTr("Home")
+ }
+ TabButton {
+ text: qsTr("Discover")
+ }
+ TabButton {
+ text: qsTr("Activity")
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-custom.qml
new file mode 100644
index 0000000000..39a94e13cc
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-custom.qml
@@ -0,0 +1,18 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+TextArea {
+ id: control
+ placeholderText: qsTr("Enter description")
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ border.color: control.enabled ? "#21be2b" : "transparent"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-scrollable.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-scrollable.qml
new file mode 100644
index 0000000000..7f915815e3
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textarea-scrollable.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ width: 100
+ height: 100
+
+ Binding { target: view.ScrollBar.vertical; property: "active"; value: true }
+
+ //! [1]
+ ScrollView {
+ id: view
+ anchors.fill: parent
+
+ TextArea {
+ text: "TextArea\n...\n...\n...\n...\n...\n...\n"
+ }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-custom.qml
new file mode 100644
index 0000000000..c4d0c88c2a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-custom.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ id: control
+ placeholderText: qsTr("Enter description")
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ color: control.enabled ? "transparent" : "#353637"
+ border.color: control.enabled ? "#21be2b" : "transparent"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-disabled.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-disabled.qml
new file mode 100644
index 0000000000..aa8639190c
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-disabled.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ width: 80
+ text: "Disabled"
+ enabled: false
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-focused.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-focused.qml
new file mode 100644
index 0000000000..62299eeabc
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-focused.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ width: 80
+ text: "Focused"
+ focus: true
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-normal.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-normal.qml
new file mode 100644
index 0000000000..72a5626142
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-textfield-normal.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+TextField {
+ width: 80
+ text: "Normal"
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar-custom.qml
new file mode 100644
index 0000000000..2aabcbfbe3
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar-custom.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+//! [file]
+ToolBar {
+ id: control
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: "#eeeeee"
+
+ Rectangle {
+ width: parent.width
+ height: 1
+ anchors.bottom: parent.bottom
+ color: "transparent"
+ border.color: "#21be2b"
+ }
+ }
+
+ RowLayout {
+ anchors.fill: parent
+ ToolButton {
+ text: qsTr("Undo")
+ }
+ ToolButton {
+ text: qsTr("Redo")
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar.qml
new file mode 100644
index 0000000000..cb07df80f6
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbar.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: children[0].implicitWidth * 2
+ height: children[0].implicitHeight
+ Binding {
+ target: root.children[0]
+ property: "width"
+ value: root.width
+ }
+//! [1]
+ToolBar {
+ RowLayout {
+ anchors.fill: parent
+ ToolButton {
+ text: qsTr("‹")
+ onClicked: stack.pop()
+ }
+ Label {
+ text: "Title"
+ elide: Label.ElideRight
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+ Layout.fillWidth: true
+ }
+ ToolButton {
+ text: qsTr("â‹®")
+ onClicked: menu.open()
+ }
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbutton-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbutton-custom.qml
new file mode 100644
index 0000000000..6ec46b0adf
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolbutton-custom.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+ToolButton {
+ id: control
+ text: qsTr("ToolButton")
+ width: 120
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ opacity: enabled ? 1.0 : 0.3
+ color: control.down ? "#17a81a" : "#21be2b"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ color: Qt.darker("#33333333", control.enabled && (control.checked || control.highlighted) ? 1.5 : 1.0)
+ opacity: enabled ? 1 : 0.3
+ visible: control.down || (control.enabled && (control.checked || control.highlighted))
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator-custom.qml
new file mode 100644
index 0000000000..201e04b0e8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator-custom.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Window
+import QtQuick.Controls
+
+//! [file]
+ToolBar {
+ RowLayout {
+ anchors.fill: parent
+
+ ToolButton {
+ text: qsTr("Action 1")
+ }
+ ToolButton {
+ text: qsTr("Action 2")
+ }
+
+ ToolSeparator {
+ padding: vertical ? 10 : 2
+ topPadding: vertical ? 2 : 10
+ bottomPadding: vertical ? 2 : 10
+
+ contentItem: Rectangle {
+ implicitWidth: parent.vertical ? 1 : 24
+ implicitHeight: parent.vertical ? 24 : 1
+ color: "#c3c3c3"
+ }
+ }
+
+ ToolButton {
+ text: qsTr("Action 3")
+ }
+ ToolButton {
+ text: qsTr("Action 4")
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator.qml
new file mode 100644
index 0000000000..eb3543402d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-toolseparator.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Window
+import QtQuick.Controls
+
+//! [1]
+ToolBar {
+ RowLayout {
+ anchors.fill: parent
+
+ ToolButton {
+ text: qsTr("Action 1")
+ }
+ ToolButton {
+ text: qsTr("Action 2")
+ }
+
+ ToolSeparator {}
+
+ ToolButton {
+ text: qsTr("Action 3")
+ }
+ ToolButton {
+ text: qsTr("Action 4")
+ }
+
+ ToolSeparator {}
+
+ ToolButton {
+ text: qsTr("Action 5")
+ }
+ ToolButton {
+ text: qsTr("Action 6")
+ }
+
+ Item {
+ Layout.fillWidth: true
+ }
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-custom.qml
new file mode 100644
index 0000000000..089e6d02b9
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-custom.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Item {
+ToolTip {
+ id: control
+ text: qsTr("A descriptive tool tip of what the button does")
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ color: "#21be2b"
+ }
+
+ background: Rectangle {
+ border.color: "#21be2b"
+ }
+}
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-hover.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-hover.qml
new file mode 100644
index 0000000000..289334d20d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-hover.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ hoverEnabled: true
+
+ ToolTip.delay: 1000
+ ToolTip.timeout: 5000
+ ToolTip.visible: hovered
+ ToolTip.text: qsTr("This tool tip is shown after hovering the button for a second.")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml
new file mode 100644
index 0000000000..e209ce9ce9
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-pressandhold.qml
@@ -0,0 +1,15 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+Button {
+ text: qsTr("Button")
+
+ ToolTip.visible: pressed
+ ToolTip.delay: Qt.styleHints.mousePressAndHoldInterval
+ ToolTip.text: qsTr("This tool tip is shown after pressing and holding the button down.")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-slider.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-slider.qml
new file mode 100644
index 0000000000..823e7f1842
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip-slider.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: slider.width
+ height: slider.height * 2.0
+
+ Binding { target: slider.anchors; property: "centerIn"; value: root }
+ Binding { target: slider.anchors; property: "verticalCenterOffset"; value: slider.height / 2 }
+ Binding { target: slider; property: "pressed"; value: root.Window.active }
+
+ //! [1]
+ Slider {
+ id: slider
+ value: 0.5
+
+ ToolTip {
+ parent: slider.handle
+ visible: slider.pressed
+ text: slider.value.toFixed(1)
+ }
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip.qml
new file mode 100644
index 0000000000..d0cf142376
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tooltip.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Item {
+ id: root
+ width: 360
+ height: button.height * 2
+
+ property Button button: children[0]
+
+ Binding { target: root.button; property: "down"; value: root.Window.active }
+ Binding { target: root.button.anchors; property: "bottom"; value: root.bottom }
+ Binding { target: root.button.anchors; property: "horizontalCenter"; value: root.horizontalCenter }
+
+ //! [1]
+ Button {
+ text: qsTr("Save")
+
+ ToolTip.visible: down
+ ToolTip.text: qsTr("Save the active project")
+ }
+ //! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-custom.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-custom.qml
new file mode 100644
index 0000000000..3487e7316d
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-custom.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [file]
+import QtQuick
+import QtQuick.Controls
+
+Tumbler {
+ id: control
+ model: 15
+
+ background: Item {
+ Rectangle {
+ opacity: control.enabled ? 0.2 : 0.1
+ border.color: "#000000"
+ width: parent.width
+ height: 1
+ anchors.top: parent.top
+ }
+
+ Rectangle {
+ opacity: control.enabled ? 0.2 : 0.1
+ border.color: "#000000"
+ width: parent.width
+ height: 1
+ anchors.bottom: parent.bottom
+ }
+ }
+
+ delegate: Text {
+ text: qsTr("Item %1").arg(modelData + 1)
+ font: control.font
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ opacity: 1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)
+
+ required property var modelData
+ required property int index
+ }
+
+ Rectangle {
+ anchors.horizontalCenter: control.horizontalCenter
+ y: control.height * 0.4
+ width: 40
+ height: 1
+ color: "#21be2b"
+ }
+
+ Rectangle {
+ anchors.horizontalCenter: control.horizontalCenter
+ y: control.height * 0.6
+ width: 40
+ height: 1
+ color: "#21be2b"
+ }
+}
+//! [file]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-listView.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-listView.qml
new file mode 100644
index 0000000000..1b39c2aa16
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-listView.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [contentItem]
+Tumbler {
+ id: tumbler
+
+ contentItem: ListView {
+ model: tumbler.model
+ delegate: tumbler.delegate
+
+ snapMode: ListView.SnapToItem
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: height / 2 - (height / tumbler.visibleItemCount / 2)
+ preferredHighlightEnd: height / 2 + (height / tumbler.visibleItemCount / 2)
+ clip: true
+ }
+}
+//! [contentItem]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-pathView.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-pathView.qml
new file mode 100644
index 0000000000..30e90b2ba5
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-pathView.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [contentItem]
+Tumbler {
+ id: tumbler
+
+ contentItem: PathView {
+ id: pathView
+ model: tumbler.model
+ delegate: tumbler.delegate
+ clip: true
+ pathItemCount: tumbler.visibleItemCount + 1
+ preferredHighlightBegin: 0.5
+ preferredHighlightEnd: 0.5
+ dragMargin: width / 2
+
+ path: Path {
+ startX: pathView.width / 2
+ startY: -pathView.delegateHeight / 2
+ PathLine {
+ x: pathView.width / 2
+ y: pathView.pathItemCount * pathView.delegateHeight - pathView.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: tumbler.availableHeight / tumbler.visibleItemCount
+ }
+}
+//! [contentItem]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml
new file mode 100644
index 0000000000..a5d4b3585a
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-tumbler-timePicker.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+//! [tumbler]
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+
+Rectangle {
+ width: frame.implicitWidth + 10
+ height: frame.implicitHeight + 10
+
+ function formatText(count, modelData) {
+ var data = count === 12 ? modelData + 1 : modelData;
+ return data.toString().length < 2 ? "0" + data : data;
+ }
+
+ FontMetrics {
+ id: fontMetrics
+ }
+
+ Component {
+ id: delegateComponent
+
+ Label {
+ text: formatText(Tumbler.tumbler.count, modelData)
+ opacity: 1.0 - Math.abs(Tumbler.displacement) / (Tumbler.tumbler.visibleItemCount / 2)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: fontMetrics.font.pixelSize * 1.25
+ }
+ }
+
+ Frame {
+ id: frame
+ padding: 0
+ anchors.centerIn: parent
+
+ Row {
+ id: row
+
+ Tumbler {
+ id: hoursTumbler
+ model: 12
+ delegate: delegateComponent
+ }
+
+ Tumbler {
+ id: minutesTumbler
+ model: 60
+ delegate: delegateComponent
+ }
+
+ Tumbler {
+ id: amPmTumbler
+ model: ["AM", "PM"]
+ delegate: delegateComponent
+ }
+ }
+ }
+}
+//! [tumbler]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-accent.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-accent.qml
new file mode 100644
index 0000000000..52aca6eea9
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-accent.qml
@@ -0,0 +1,19 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Layouts
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+Pane {
+ padding: 10
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ highlighted: true
+ Universal.accent: Universal.Orange
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-background.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-background.qml
new file mode 100644
index 0000000000..106549f789
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-background.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+Pane {
+ padding: 10
+
+//! [1]
+Pane {
+ Universal.background: Universal.Steel
+
+ Button {
+ text: qsTr("Button")
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-foreground.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-foreground.qml
new file mode 100644
index 0000000000..491a4f94d4
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-foreground.qml
@@ -0,0 +1,17 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+Pane {
+ padding: 10
+
+//! [1]
+Button {
+ text: qsTr("Button")
+ Universal.foreground: Universal.Pink
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-theme.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-theme.qml
new file mode 100644
index 0000000000..5ade2c7c55
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-universal-theme.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Controls.Universal
+
+Pane {
+ padding: 10
+
+//! [1]
+Pane {
+ Universal.theme: Universal.Dark
+
+ Button {
+ text: qsTr("Button")
+ }
+}
+//! [1]
+}
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn-layout.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn-layout.qml
new file mode 100644
index 0000000000..6d1dd1ba79
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn-layout.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+//! [1]
+RowLayout {
+ WeekNumberColumn {
+ month: grid.month
+ year: grid.year
+ locale: grid.locale
+ Layout.fillHeight: true
+ }
+
+ MonthGrid {
+ id: grid
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("en_US")
+ Layout.fillHeight: true
+ }
+}
+//! [1]
diff --git a/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn.qml b/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn.qml
new file mode 100644
index 0000000000..e3c757a0b8
--- /dev/null
+++ b/src/quickcontrols/doc/snippets/qtquickcontrols2-weeknumbercolumn.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+import QtQuick
+import QtQuick.Controls
+
+//! [1]
+WeekNumberColumn {
+ month: Calendar.December
+ year: 2015
+ locale: Qt.locale("en_US")
+}
+//! [1]
diff --git a/src/quickcontrols/doc/src/external-pages.qdoc b/src/quickcontrols/doc/src/external-pages.qdoc
new file mode 100644
index 0000000000..0b1c99a7c1
--- /dev/null
+++ b/src/quickcontrols/doc/src/external-pages.qdoc
@@ -0,0 +1,12 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \externalpage https://doc.qt.io/qt-5/qtquickcontrols2-differences.html
+ \title Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1
+*/
+
+/*!
+ \externalpage https://doc.qt.io/qtcreator/creator-project-creating.html#selecting-project-type
+ \title Qt Creator: Project Types
+*/
diff --git a/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc
new file mode 100644
index 0000000000..0acad02d38
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/customize-button-background.qdocinc
@@ -0,0 +1,25 @@
+//! [file]
+\qml
+import QtQuick
+import QtQuick.Controls
+
+ApplicationWindow {
+ width: 400
+ height: 400
+ visible: true
+
+ Button {
+ id: button
+ text: "A Special Button"
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 40
+ color: button.down ? "#d6d6d6" : "#f6f6f6"
+ border.color: "#26282a"
+ border.width: 1
+ radius: 4
+ }
+ }
+}
+\endqml
+//! [file]
diff --git a/src/quickcontrols/doc/src/includes/customizing-native-styles.qdocinc b/src/quickcontrols/doc/src/includes/customizing-native-styles.qdocinc
new file mode 100644
index 0000000000..e1feacaa49
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/customizing-native-styles.qdocinc
@@ -0,0 +1,14 @@
+It is instead recommended to always base a customized control on top of a single style
+that is available on all platforms, e.g \l {Basic Style}, \l {Fusion Style}, \l {Imagine Style},
+\l {Material Style}, \l {Universal Style}. By doing so, you are guaranteed that it will
+always look the same, regardless of which style the application is run with. For example:
+
+\code
+ import QtQuick.Controls.Basic as Basic
+
+ Basic.SpinBox {
+ background: Rectangle { /* ... */ }
+ }
+\endcode
+
+\b {See also} \l {Styling Qt Quick Controls}
diff --git a/src/quickcontrols/doc/src/includes/inputmethodhints.qdocinc b/src/quickcontrols/doc/src/includes/inputmethodhints.qdocinc
new file mode 100644
index 0000000000..73710e1e15
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/inputmethodhints.qdocinc
@@ -0,0 +1,38 @@
+//! [flags]
+The value is a bit-wise combination of flags or \c Qt.ImhNone if no hints are set.
+
+Flags that alter behavior are:
+
+\list
+\li Qt.ImhHiddenText - Characters should be hidden, as is typically used when entering passwords.
+\li Qt.ImhSensitiveData - Typed text should not be stored by the active input method
+ in any persistent storage like predictive user dictionary.
+\li Qt.ImhNoAutoUppercase - The input method should not try to automatically switch to upper case
+ when a sentence ends.
+\li Qt.ImhPreferNumbers - Numbers are preferred (but not required).
+\li Qt.ImhPreferUppercase - Upper case letters are preferred (but not required).
+\li Qt.ImhPreferLowercase - Lower case letters are preferred (but not required).
+\li Qt.ImhNoPredictiveText - Do not use predictive text (i.e. dictionary lookup) while typing.
+
+\li Qt.ImhDate - The text editor functions as a date field.
+\li Qt.ImhTime - The text editor functions as a time field.
+\endlist
+
+Flags that restrict input (exclusive flags) are:
+
+\list
+\li Qt.ImhDigitsOnly - Only digits are allowed.
+\li Qt.ImhFormattedNumbersOnly - Only number input is allowed. This includes decimal point and minus sign.
+\li Qt.ImhUppercaseOnly - Only upper case letter input is allowed.
+\li Qt.ImhLowercaseOnly - Only lower case letter input is allowed.
+\li Qt.ImhDialableCharactersOnly - Only characters suitable for phone dialing are allowed.
+\li Qt.ImhEmailCharactersOnly - Only characters suitable for email addresses are allowed.
+\li Qt.ImhUrlCharactersOnly - Only characters suitable for URLs are allowed.
+\endlist
+
+Masks:
+
+\list
+\li Qt.ImhExclusiveInputMask - This mask yields nonzero if any of the exclusive flags are used.
+\endlist
+//! [flags]
diff --git a/src/quickcontrols/doc/src/includes/qquickcombobox.qdocinc b/src/quickcontrols/doc/src/includes/qquickcombobox.qdocinc
new file mode 100644
index 0000000000..5e19f5f1f4
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickcombobox.qdocinc
@@ -0,0 +1,6 @@
+//! [functions-after-component-completion]
+
+\note This function can only be used after
+\l {Component::completed()}{Component.completed()} is emitted for the ComboBox.
+
+//! [functions-after-component-completion]
diff --git a/src/quickcontrols/doc/src/includes/qquickcontrol-background.qdocinc b/src/quickcontrols/doc/src/includes/qquickcontrol-background.qdocinc
new file mode 100644
index 0000000000..02d92de07c
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickcontrol-background.qdocinc
@@ -0,0 +1,13 @@
+//! [notes]
+
+\note If the background item has no explicit size specified, it automatically
+ follows the control's size. In most cases, there is no need to specify
+ width or height for a background item.
+
+\note Most controls use the implicit size of the background item to calculate
+the implicit size of the control itself. If you replace the background item
+with a custom one, you should also consider providing a sensible implicit
+size for it (unless it is an item like \l Image which has its own implicit
+size).
+
+//! [notes]
diff --git a/src/quickcontrols/doc/src/includes/qquickcontrol-focusreason.qdocinc b/src/quickcontrols/doc/src/includes/qquickcontrol-focusreason.qdocinc
new file mode 100644
index 0000000000..b69e9e60ec
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickcontrol-focusreason.qdocinc
@@ -0,0 +1,15 @@
+This property holds the reason of the last focus change.
+
+\note This property does not indicate whether the control has \l {Item::activeFocus}
+ {active focus}, but the reason why the control either gained or lost focus.
+
+\value Qt.MouseFocusReason A mouse action occurred.
+\value Qt.TabFocusReason The Tab key was pressed.
+\value Qt.BacktabFocusReason A Backtab occurred. The input for this may include the Shift or Control keys; e.g. Shift+Tab.
+\value Qt.ActiveWindowFocusReason The window system made this window either active or inactive.
+\value Qt.PopupFocusReason The application opened/closed a pop-up that grabbed/released the keyboard focus.
+\value Qt.ShortcutFocusReason The user typed a label's buddy shortcut
+\value Qt.MenuBarFocusReason The menu bar took focus.
+\value Qt.OtherFocusReason Another reason, usually application-specific.
+
+\sa Item::activeFocus
diff --git a/src/quickcontrols/doc/src/includes/qquickdial.qdocinc b/src/quickcontrols/doc/src/includes/qquickdial.qdocinc
new file mode 100644
index 0000000000..3370b3d8f3
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickdial.qdocinc
@@ -0,0 +1,13 @@
+//! [inputMode]
+Dial supports three \l {inputMode}{input modes}: \c Dial.Circular,
+\c Dial.Horizontal and \c Dial.Vertical. The circular input mode operates on an
+absolute input system, where the position of the cursor within the dial
+directly reflects its value. The horizontal and vertical input modes use a
+relative input system, where changes in the cursor's position are "added" to
+the value of the dial.
+
+The following image illustrates the directions in which the various input modes
+track movement:
+
+\image qtquickcontrols2-dial-inputmode.png
+//! [inputMode]
diff --git a/src/quickcontrols/doc/src/includes/qquickicon.qdocinc b/src/quickcontrols/doc/src/includes/qquickicon.qdocinc
new file mode 100644
index 0000000000..eadaea5983
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickicon.qdocinc
@@ -0,0 +1,52 @@
+//! [grouped-properties]
+\table
+\header
+ \li Name
+ \li Description
+\row
+ \li name
+ \li This property holds the name of the icon to use.
+
+ The icon will be loaded from the platform theme. If the icon is found
+ in the theme, it will always be used; even if \l icon.source is also set.
+ If the icon is not found, \l icon.source will be used instead.
+
+ For more information on theme icons, see \l {QIcon::fromTheme()}.
+\row
+ \li source
+ \li This property holds the name of the icon to use.
+
+ The icon will be loaded as a regular image.
+
+ If \l icon.name is set and refers to a valid theme icon, it will always
+ be used instead of this property.
+\row
+ \li width
+ \li This property holds the width of the icon.
+
+ The icon's width will never exceed this value, though it will
+ shrink when necessary.
+\row
+ \li height
+ \li This property holds the height of the icon.
+
+ The icon's height will never exceed this value, though it will
+ shrink when necessary.
+\row
+ \li color
+ \li This property holds the color of the icon.
+
+ The icon is tinted with the specified color, unless the color is
+ set to \c "transparent".
+
+\row
+ \li cache
+ \li This property specifies whether the icon should be cached.
+
+ The default value is true.
+
+ For more information, see \l {Image::}{cache}.
+
+ This property was introduced in QtQuick.Controls 2.13.
+\endtable
+//! [grouped-properties]
diff --git a/src/quickcontrols/doc/src/includes/qquickimaginestyle.qdocinc b/src/quickcontrols/doc/src/includes/qquickimaginestyle.qdocinc
new file mode 100644
index 0000000000..411c6c1088
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickimaginestyle.qdocinc
@@ -0,0 +1,60 @@
+//! [conf]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c Path
+ \li Specifies the \l {imagine-path-attached-prop}{path} to the directory that contains
+ the Imagine style assets. If not specified, the built-in assets are used.
+
+ For example, to specify a path to a directory stored in the
+ \l {The Qt Resource System}{resource system}:
+
+ \badcode
+ [Imagine]
+ Path=:/imagine-assets
+ \endcode
+
+ To specify a relative path to a local directory:
+
+ \badcode
+ [Imagine]
+ Path=imagine-assets
+ \endcode
+
+ \note Due to a technical limitation, the path should not be named
+ \e "imagine" if it is relative to the \c qtquickcontrols2.conf file.
+\endtable
+//! [conf]
+
+//! [env]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c QT_QUICK_CONTROLS_IMAGINE_PATH
+ \li Specifies the path to the directory that contains the Imagine style assets.
+ If not specified, the built-in assets are used.
+
+ For example, to specify a path to a directory stored in the
+ \l {The Qt Resource System}{resource system}:
+
+ \badcode
+ QT_QUICK_CONTROLS_IMAGINE_PATH=:/imagine-assets
+ \endcode
+
+ To specify a relative path to a local directory:
+
+ \badcode
+ QT_QUICK_CONTROLS_IMAGINE_PATH=imagine-assets
+ \endcode
+
+ \note Due to a technical limitation, the path should not be named
+ \e "imagine" if it is relative to the \c qtquickcontrols2.conf file.
+ \li \c QT_QUICK_CONTROLS_IMAGINE_SMOOTH
+ \li Set to \c 1 to enable smooth scaling for 9-patch images.
+ This environment variable was added in Qt 6.5.
+\endtable
+//! [env]
diff --git a/src/quickcontrols/doc/src/includes/qquickmaterialstyle.qdocinc b/src/quickcontrols/doc/src/includes/qquickmaterialstyle.qdocinc
new file mode 100644
index 0000000000..803425a88b
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickmaterialstyle.qdocinc
@@ -0,0 +1,79 @@
+//! [conf]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c Theme
+ \li Specifies the default \l {material-theme-attached-prop}{Material theme}.
+ The value can be one of the available themes, for example \c "Dark".
+ \row
+ \li \c Variant
+ \li Specifies the Material variant. The Material Design has two
+ variants: a normal variant designed for touch devices, and a dense
+ variant for desktop. The dense variant uses smaller sizes for
+ controls and their fonts.
+
+ The value can be \c "Normal" or \c "Dense".
+ \row
+ \li \c Accent
+ \li Specifies the default \l {material-accent-attached-prop}{Material accent color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Material colors}, for example \c "Teal".
+ \row
+ \li \c Primary
+ \li Specifies the default \l {material-primary-attached-prop}{Material primary color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Material colors}, for example \c "BlueGrey".
+ \row
+ \li \c Foreground
+ \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Material colors},
+ for example \c "Brown".
+ \row
+ \li \c Background
+ \li Specifies the default \l {material-background-attached-prop}{Material background color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Material colors},
+ for example \c "Grey".
+\endtable
+//! [conf]
+
+//! [env]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_THEME
+ \li Specifies the default \l {material-theme-attached-prop}{Material theme}.
+ The value can be one of the available themes, for example \c "Dark".
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_VARIANT
+ \li Specifies the Material variant. The Material Design has two
+ variants: a normal variant designed for touch devices, and a dense
+ variant for desktop. The dense variant uses smaller sizes for
+ controls and their fonts.
+
+ The value can be \c "Normal" or \c "Dense".
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_ACCENT
+ \li Specifies the default \l {material-accent-attached-prop}{Material accent color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Material colors}, for example \c "Teal".
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_PRIMARY
+ \li Specifies the default \l {material-primary-attached-prop}{Material primary color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Material colors}, for example \c "BlueGrey".
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_FOREGROUND
+ \li Specifies the default \l {material-foreground-attached-prop}{Material foreground color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Material colors},
+ for example \c "Brown".
+ \row
+ \li \c QT_QUICK_CONTROLS_MATERIAL_BACKGROUND
+ \li Specifies the default \l {material-background-attached-prop}{Material background color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Material colors},
+ for example \c "Grey".
+\endtable
+//! [env]
diff --git a/src/quickcontrols/doc/src/includes/qquickoverlay-popup-parent.qdocinc b/src/quickcontrols/doc/src/includes/qquickoverlay-popup-parent.qdocinc
new file mode 100644
index 0000000000..5562f6a039
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickoverlay-popup-parent.qdocinc
@@ -0,0 +1,20 @@
+The following example uses the attached \l {Overlay::overlay}{Overlay.overlay}
+property to position a popup in the center of the window, despite the position
+of the button that opens the popup:
+
+\code
+Button {
+ onClicked: popup.open()
+
+ Popup {
+ id: popup
+
+ parent: Overlay.overlay
+
+ x: Math.round((parent.width - width) / 2)
+ y: Math.round((parent.height - height) / 2)
+ width: 100
+ height: 100
+ }
+}
+\endcode
diff --git a/src/quickcontrols/doc/src/includes/qquickpopup-padding.qdocinc b/src/quickcontrols/doc/src/includes/qquickpopup-padding.qdocinc
new file mode 100644
index 0000000000..31f5d2db02
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickpopup-padding.qdocinc
@@ -0,0 +1,10 @@
+//! [padding]
+
+The padding properties are used to control the geometry of the
+\l {contentItem}{content item}.
+
+Popup uses the same approach to padding as \l {Control::padding}{Control}.
+For a visual explanation of the padding system, see the \l {Control Layout}
+section of the documentation.
+
+//! [padding]
diff --git a/src/quickcontrols/doc/src/includes/qquickstackview.qdocinc b/src/quickcontrols/doc/src/includes/qquickstackview.qdocinc
new file mode 100644
index 0000000000..20c9bdc369
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickstackview.qdocinc
@@ -0,0 +1,5 @@
+//! [pop-ownership]
+Only items that StackView created itself (from a \l Component or \l [QML]
+url) will be destroyed when popped. See \l {Item Ownership} for more
+information.
+//! [pop-ownership]
diff --git a/src/quickcontrols/doc/src/includes/qquickswipedelegate-interaction.qdocinc b/src/quickcontrols/doc/src/includes/qquickswipedelegate-interaction.qdocinc
new file mode 100644
index 0000000000..05aeadb654
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickswipedelegate-interaction.qdocinc
@@ -0,0 +1,5 @@
+Both interactive and non-interactive items can be used here. Normal
+event handling rules apply; if an interactive control like \l Button
+is used, interaction signals of SwipeDelegate such as
+\l {AbstractButton::}{clicked()} will not get emitted if the button
+is clicked.
diff --git a/src/quickcontrols/doc/src/includes/qquickswitch.qdocinc b/src/quickcontrols/doc/src/includes/qquickswitch.qdocinc
new file mode 100644
index 0000000000..985f85d979
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickswitch.qdocinc
@@ -0,0 +1,28 @@
+//! [position]
+
+This property holds the logical position of the thumb indicator.
+
+The position is expressed as a fraction of the indicator's size, in the range
+\c 0.0 - \c 1.0. The position can be used for example to determine whether
+the thumb has been dragged past the halfway point. For visualizing a thumb
+indicator, the right-to-left aware \l visualPosition should be used instead.
+
+\sa visualPosition
+
+//! [position]
+
+
+//! [visualPosition]
+
+This property holds the visual position of the thumb indicator.
+
+The position is expressed as a fraction of the indicator's size, in the range
+\c 0.0 - \c 1.0. When the control is \l {Control::mirrored}{mirrored}, the
+value is equal to \c {1.0 - position}. This makes the value suitable for
+visualizing the thumb indicator taking right-to-left support into account.
+In order to for example determine whether the thumb has been dragged past
+the halfway point, the logical \l position should be used instead.
+
+\sa position
+
+//! [visualPosition]
diff --git a/src/quickcontrols/doc/src/includes/qquicktooltip.qdocinc b/src/quickcontrols/doc/src/includes/qquicktooltip.qdocinc
new file mode 100644
index 0000000000..0046a2d8b0
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquicktooltip.qdocinc
@@ -0,0 +1,6 @@
+//! [customize-note]
+\note to customize the \l {Attached Tool Tips}{attached ToolTip}, it
+must be provided as part of
+\l {Creating a Custom Style}{your own style}. To do a one-off
+customization of a \c ToolTip, see \l {Custom Tool Tips}.
+//! [customize-note]
diff --git a/src/quickcontrols/doc/src/includes/qquickuniversalstyle.qdocinc b/src/quickcontrols/doc/src/includes/qquickuniversalstyle.qdocinc
new file mode 100644
index 0000000000..6c3b1289fa
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/qquickuniversalstyle.qdocinc
@@ -0,0 +1,53 @@
+//! [conf]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c Theme
+ \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}.
+ The value can be one of the available themes, for example \c "Dark".
+ \row
+ \li \c Accent
+ \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Universal colors}, for example \c "Violet".
+ \row
+ \li \c Foreground
+ \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Universal colors},
+ for example \c "Brown".
+ \row
+ \li \c Background
+ \li Specifies the default \l {universal-background-attached-prop}{Universal background color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Universal colors},
+ for example \c "Steel".
+\endtable
+//! [conf]
+
+//! [env]
+\table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c QT_QUICK_CONTROLS_UNIVERSAL_THEME
+ \li Specifies the default \l {universal-theme-attached-prop}{Universal theme}.
+ The value can be one of the available themes, for example \c "Dark".
+ \row
+ \li \c QT_QUICK_CONTROLS_UNIVERSAL_ACCENT
+ \li Specifies the default \l {universal-accent-attached-prop}{Universal accent color}.
+ The value can be any \l {colorvaluetypedocs}{color}, but it is recommended to use
+ one of the \l {pre-defined Universal colors}, for example \c "Violet".
+ \row
+ \li \c QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND
+ \li Specifies the default \l {universal-foreground-attached-prop}{Universal foreground color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Universal colors},
+ for example \c "Brown".
+ \row
+ \li \c QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND
+ \li Specifies the default \l {universal-background-attached-prop}{Universal background color}.
+ The value can be any \l {colorvaluetypedocs}{color}, or one of the \l {pre-defined Universal colors},
+ for example \c "Steel".
+\endtable
+//! [env]
diff --git a/src/quickcontrols/doc/src/includes/zero-based-months.qdocinc b/src/quickcontrols/doc/src/includes/zero-based-months.qdocinc
new file mode 100644
index 0000000000..ca2d62264f
--- /dev/null
+++ b/src/quickcontrols/doc/src/includes/zero-based-months.qdocinc
@@ -0,0 +1,18 @@
+The Qt Quick Calendar module uses 0-based month numbers to be consistent
+with the JavaScript Date type, that is used by the QML language. This
+means that \c Date::getMonth() can be passed to the methods as is. When
+dealing with month numbers directly, it is highly recommended to use the
+following enumeration values to avoid confusion.
+
+\value Calendar.January January (0)
+\value Calendar.February February (1)
+\value Calendar.March March (2)
+\value Calendar.April April (3)
+\value Calendar.May May (4)
+\value Calendar.June June (5)
+\value Calendar.July July (6)
+\value Calendar.August August (7)
+\value Calendar.September September (8)
+\value Calendar.October October (9)
+\value Calendar.November November (10)
+\value Calendar.December December (11)
diff --git a/src/quickcontrols/doc/src/qt6-changes.qdoc b/src/quickcontrols/doc/src/qt6-changes.qdoc
new file mode 100644
index 0000000000..c0eb7755d6
--- /dev/null
+++ b/src/quickcontrols/doc/src/qt6-changes.qdoc
@@ -0,0 +1,281 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols-changes-qt6.html
+ \title Changes to Qt Quick Controls
+ \ingroup changes-qt-5-to-6
+ \brief Migrate Qt Quick Controls to Qt 6.
+
+ Qt 6 is a result of the conscious effort to make the framework more
+ efficient and easy to use.
+
+ We try to maintain compatibility for all the public APIs in each release.
+ Some changes were inevitable in an effort to make Qt a better framework.
+
+ In this topic we summarize those changes in Qt Quick Controls, and provide
+ guidance to handle them.
+
+ \section1 Migrating from Qt Quick Controls 1
+
+ Qt Quick Controls 1 was deprecated in Qt 5.11 and is removed from
+ Qt 6.0. Use Qt Quick Controls (previously known as Qt Quick Controls 2)
+ instead. For more information, refer to the
+ \l{Qt 5.15: Qt Quick Controls vs Qt Quick Controls 1} topic in the Qt 5
+ documentation.
+
+ \section1 Type registration changes
+
+ Qt Quick Controls has undergone some large, mostly internal changes in Qt
+ 6. By making use of the improved type registration introduced in Qt 5.15,
+ we pave the way for compilation of the module's QML files to C++ and enable
+ tooling to become more effective. In particular, Qt Creator's QML code
+ model should have a more complete picture of types, making its completion
+ and error checking of Qt Quick Controls code more reliable. Static analysis
+ tools like qmllint and qmlformat also benefit by becoming aware of the
+ types that are now declared at compile time in C++.
+
+ As a result of these changes, some things are done a little differently.
+
+ \section2 Custom styles are now proper QML modules
+
+ To enable compile time type registration, each Qt Quick Controls style is
+ now a proper QML module. Previously, a single \c Button.qml was sufficient
+ to create your own style. While convenient, this required some non-standard
+ API, which in turn required adaptation in tooling like Qt Designer.
+
+ Now, all QML types that a style implements must be declared in that style's
+ qmldir file:
+
+ \code
+ module MyStyle
+ Button 1.0 Button.qml
+ \endcode
+
+ \omit
+ TODO: Once we have documentation for the CMake function qt6_add_qml_module,
+ this would be a good place to link to it, stating that you don't have to
+ manually write the qmldir files.
+ \endomit
+
+ By unifying this with the rest of the QML world, styles become more
+ familiar to developers and hopefully easier to understand for beginners. As
+ a consequence, the following API had to be removed:
+
+ \list
+ \li QQuickStyle::addStylePath()
+ \li QQuickStyle::availableStyles()
+ \li QQuickStyle::path()
+ \li QQuickStyle::stylePathList()
+ \li QT_QUICK_CONTROLS_STYLE_PATH
+ \endlist
+
+ Now that the styles are required to be found in the QML engine's import
+ path like any other QML module, it is no longer necessary or possible to
+ support this API.
+
+ \section3 Style names
+
+ In addition, there is now only one valid, case-sensitive form for style
+ names: "Material", "MyStyle", and so on. That is: the style name must
+ exactly match the name of the QML module. This also applies to file
+ selectors, where previously, all style names were lower case. For example,
+ where the following was a valid structure for a Qt 5 project:
+
+ \badcode
+ MyProject
+ ├── main.qml
+ ├── HomePage.qml
+ └── +material
+ └───HomePage.qml
+ \endcode
+
+ In Qt 6, \c +material becomes \c +Material:
+
+ \badcode
+ MyProject
+ ├── main.qml
+ ├── HomePage.qml
+ └── +Material
+ └───HomePage.qml
+ \endcode
+
+ All of the existing ways to \l {Using Styles in Qt Quick Controls}{run an
+ application with a specific style} are still supported.
+
+ \section2 Runtime and compile time style selection
+
+ Importing a style now has extra meaning due to the way that imports work
+ internally. Previously, importing \c QtQuick.Controls would register the
+ control types from the current style with the QML engine:
+
+ \qml
+ import QtQuick.Controls
+ \endqml
+
+ We refer to this as runtime style selection, as the style is selected at
+ runtime.
+
+ Explicitly importing \c QtQuick.Controls.Material would then simply expose
+ any extra API provided by that style (for example, the attached Material
+ type):
+
+ \qml
+ import QtQuick.Controls.Material
+ \endqml
+
+ Now, explicitly importing a style does both.
+
+ This effectively means that the control types (like Button) from the last
+ imported style will be used. We refer to this as compile time style
+ selection.
+
+ This has implications for existing code. Namely, if your application
+ supports more than one style, move these imports into their own QML files
+ that are file-selected.
+
+ For example, if you have the following \c main.qml:
+
+ \qml
+ import QtQuick.Controls
+ import QtQuick.Controls.Material
+ import QtQuick.Controls.Universal
+
+ ApplicationWindow {
+ width: 600
+ height: 400
+ visible: true
+
+ Material.theme: darkMode ? Material.Dark : Material.Light
+ Universal.theme: darkMode ? Universal.Dark : Universal.Light
+
+ // Child items, etc.
+ }
+ \endqml
+
+ You can move the common code into a "base" component:
+
+ \qml
+ // MainWindow.qml
+
+ import QtQuick.Controls
+
+ ApplicationWindow {}
+ \endqml
+
+ Then, add a \c +Material subdirectory, and in it, add the Material-specific code into \c MainWindow.qml:
+
+ \qml
+ // +Material/MainWindow.qml
+
+ import QtQuick.Controls.Material
+
+ ApplicationWindow {
+ Material.theme: darkMode ? Material.Dark : Material.Light
+ }
+ \endqml
+
+ Do the same for Universal:
+
+ \qml
+ // +Universal/MainWindow.qml
+
+ import QtQuick.Controls.Universal
+
+ ApplicationWindow {
+ Universal.theme: darkMode ? Universal.Dark : Universal.Light
+ }
+ \endqml
+
+ Then, in \c main.qml:
+
+ \qml
+ import QtQuick.Controls
+
+ MainWindow {
+ width: 600
+ height: 400
+ visible: true
+
+ // Child items, etc.
+ }
+ \endqml
+
+ See also: \l {Using File Selectors with Qt Quick Controls}.
+
+ \section1 Default Style
+
+ The Default style was renamed to "Basic", as it is no longer the default
+ style. Instead, the default style is now chosen based on the platform
+ that Qt was built for:
+
+ \list
+ \li Android: \l {Material Style}
+ \li Linux: \l {Fusion Style}
+ \li macOS: \l {macos Style}
+ \li Windows: \l {Windows Style}
+ \li All other platforms: \l {Basic Style}
+ \endlist
+
+ Therefore, applications that didn't specify a style in Qt 5 and have customized
+ controls should \l {Using Styles in Qt Quick Controls}{explicitly specify}
+ the Basic style in Qt 6 to ensure that those controls look and behave as
+ they did with Qt 5.
+
+ \section1 Palette
+
+ The palette API was moved to QQuickItem. The various APIs that use palettes
+ in Qt Quick Controls are unchanged.
+
+ \section1 Controls
+
+ \section2 Changes to ApplicationWindow
+
+ The deprecated overlay properties and attached API were removed. Use the
+ \l Overlay attached type instead.
+
+ \section2 Changes to ComboBox
+
+ The \l {ComboBox::}{pressed} property is now read-only. To modify the
+ visual pressed state of a ComboBox, use the \l {ComboBox::}{down} property
+ instead.
+
+ \section2 Changes to Container
+
+ The deprecated \c removeItem(var) function was removed.
+ \l {Container::}{removeItem(Item)} or \l {Container::}{takeItem(int)} can
+ be used instead.
+
+ \section2 Changes to Dialog
+
+ \l {Dialog}'s \l {Dialog::}{accepted()} and \l {Dialog::}{rejected()}
+ signals are now emitted before \l {Popup::}{closed()} when calling
+ \l {Dialog::}{done()}, \l {Dialog::}{accept()} and \l {Dialog::}{reject()}.
+
+ \section2 Changes to Menu
+
+ The deprecated \c removeItem(var) function was removed.
+ \l {Menu::}{removeItem(Item)} or \l {Menu::}{takeItem(int)} can be used
+ instead.
+
+ \section2 Changes to ToolTip
+
+ \l {ToolTip}'s timeout now begins only after \l {Popup::}{opened()} has
+ been emitted. This results in tooltips with enter transitions being visible
+ for the entire duration of the timeout property. This means that they are
+ visible slightly longer than they were before, so it may be worthwhile to
+ visually check tooltips in your application and adjust timeouts if
+ necessary.
+
+ \section2 Changes to StackView
+
+ The StackView.Transition enum value was deprecated. The operation argument
+ can be omitted in order to use the default transition for any given
+ operation.
+
+ \section2 Changes to Tumbler
+
+ \l {Item::}{implicitWidth} and \l {Item::}{implicitHeight} must now be
+ provided for \l {Tumbler}'s \l {Control::}{contentItem}, making it
+ consistent with all other controls.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-basic.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-basic.qdoc
new file mode 100644
index 0000000000..b87fe8b7db
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-basic.qdoc
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-basic.html
+ \title Basic Style
+
+ The Basic style is a basic all-round style.
+
+ The Basic style is a simple and light-weight style that offers the maximum
+ performance for Qt Quick Controls. It is built with a minimal amount of Qt
+ Quick primitives, and keeps animations and transitions to the minimum.
+
+ \image qtquickcontrols2-basic.png
+
+ The style is selected by default when running Qt Quick Controls applications.
+ It is built into the module's resources, so by default it is shipped with
+ any application that depends on the Qt Quick Controls module
+
+ \note The Basic style is used as a fallback for other styles. If a style
+ does not implement a certain control, the Basic style implementation of
+ that control is selected.
+
+ \b {See also} \l {Material Style}, \l {Universal Style}
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-buttons.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-buttons.qdoc
new file mode 100644
index 0000000000..b2256f0e60
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-buttons.qdoc
@@ -0,0 +1,167 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-buttons.html
+ \title Button Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for button controls
+
+ Qt Quick Controls offers a selection of button-like controls.
+
+ \annotatedlist qtquickcontrols2-buttons
+
+ Each type of button has its own specific use case. The following
+ sections offer guidelines for choosing the appropriate type of button,
+ depending on the use case.
+
+ \section1 Button Control
+
+ \l Button is a clickable control that starts an action, or opens or
+ closes a popup. A button usually has a text label but it can also
+ contain an icon.
+
+ Button is a very suitable control when a popup or dialog needs
+ to perform an action. The most common examples are Apply, Cancel,
+ Save, Close and Help.
+
+ \image qtquickcontrols2-button.gif
+
+ Recommendations:
+
+ \list
+ \li The button's text should be a verb describing the action, or a noun matching
+ the title of the popup that will be opened.
+ \li Don't use a button to set state. \l Switch is more suitable for that.
+ \li Use the default font unless you have UI guidelines specifying otherwise.
+ \li If the text is localized, consider the influence of a longer text on the layout.
+ \endlist
+
+ \b {See also} \l Button and \l AbstractButton
+
+ \section1 CheckBox Control
+
+ \image qtquickcontrols2-checkbox.gif
+
+ \l CheckBox is used to build multi-selection option lists. Any number of
+ options can be selected, including none, but the options should
+ not be mutually exclusive.
+
+ Use a single CheckBox for a yes/no choice, such as when you have
+ to accept the terms of service agreement in a form.
+
+ For a single yes/no choice, it is also possible to use a switch. If the choice
+ concerns an option, it is best to use a CheckBox. If it concerns action to
+ be taken, a switch is recommended.
+
+ When options can be grouped, you can use a partially checked CheckBox to
+ represent the whole group. Use the checkbox's
+ \l {CheckBox::checkState}{partially checked state} when a user selects
+ some, but not all, sub-items in the group.
+
+ The three availables check states are: checked, partially checked and
+ unchecked.
+
+ The checkable options are often listed vertically.
+
+ Recommendations:
+ \list
+ \li The checkbox label should be a statement that the check mark makes true,
+ and that the absence of a check mark makes false.
+ \li The checkbox label should not contain a negative statement.
+ \li Use the default font, unless you have UI guidelines specifying otherwise.
+ \li If the text is localized, consider the influence of a longer text on the layout.
+ \endlist
+
+ \b {See also} \l CheckBox
+
+ \section1 DelayButton Control
+
+ \l DelayButton is a button that incorporates a delay before triggering an action.
+ This delay prevents accidental presses.
+
+ \image qtquickcontrols2-delaybutton.gif
+
+ Recommendations:
+ \list
+ \li Use in touch user interfaces.
+ \li Use for actions that must be triggered with care.
+ \endlist
+
+ \b {See also} \l Button and \l AbstractButton
+
+ \section1 RadioButton Control
+
+ \image qtquickcontrols2-radiobutton.gif
+
+ \l RadioButton is used to select only one option from a set of options.
+ Selecting one option automatically deselects the one selected before.
+
+ If there are only two mutually exclusive options, combine them into a
+ single checkbox or a switch.
+
+ Recommendations:
+
+ \list
+ \li Limit the label text to one line.
+ \li Ensure that a sensible default option is checked.
+ \li List RadioButton options vertically.
+ \li If the text is localized, consider the influence of a longer text on the layout.
+ \li Use the default font, unless you have UI guidelines that specify otherwise.
+ \li Just like with CheckBox, do not make the list too large.
+ \li In order to avoid confusion, do not put two groups of radio buttons next to each
+ other.
+ \endlist
+
+ \b {See also} \l RadioButton
+
+ \section1 RoundButton Control
+
+ \l RoundButton is a clickable control that starts an action, or opens or
+ closes a popup. A round button with a square image icon or one-letter font
+ icon is circular. A circular RoundButton takes less space than a normal
+ \l Button, and can also be used as a floating action button.
+
+ \image qtquickcontrols2-roundbutton.png
+
+ Recommendations:
+
+ \list
+ \li Keep labels short and concise.
+ \li If the text is localized, consider the influence of a longer text on the layout.
+ \endlist
+
+ \b {See also} \l RoundButton
+
+ \section1 Switch Control
+
+ \image qtquickcontrols2-switch.png
+
+ \l Switch represents a physical switch that allows users to choose between an "on"
+ or "off" state.
+ Use a switch for binary operations that take effect immediately after it has been
+ switched on. For example, a switch to turn WIFI on or off.
+
+ Recommendations:
+
+ \list
+ \li Keep labels short and concise.
+ \li If the text is localized, consider the influence of a longer text on the layout.
+ \endlist
+
+ \b {See also} \l Switch
+
+ \section1 ToolButton Control
+
+ \image qtquickcontrols2-toolbutton.png
+
+ \l ToolButton is nearly identical to \l Button, but it has a graphical
+ appearance that makes it more suitable for insertion into a \l ToolBar.
+
+ \b {See also} \l ToolButton
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-configuration.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-configuration.qdoc
new file mode 100644
index 0000000000..02adbe5644
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-configuration.qdoc
@@ -0,0 +1,180 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-configuration.html
+ \keyword Qt Quick Controls Configuration File
+ \title Qt Quick Controls Configuration File
+ \keyword Qt Quick Controls 2 Configuration File
+
+ Qt Quick Controls support a special configuration file, \c qtquickcontrols2.conf,
+ which is built into an application's resources.
+
+ The configuration file can specify the preferred style and certain style-specific
+ attributes. The following example specifies that the preferred style is the \l {Material style}.
+ Furthermore, when the application is run with the Material style, its theme is light and the
+ accent and primary colors are teal and blue grey, respectively. However, if the application
+ is run with the \l {Universal style} instead, the accent color is red and the appropriate theme
+ is chosen based on the system theme colors.
+
+ \code
+ [Controls]
+ Style=Material
+
+ [Universal]
+ Theme=System
+ Accent=Red
+
+ [Material]
+ Theme=Light
+ Accent=Teal
+ Primary=BlueGrey
+ \endcode
+
+ It is possible to specify a custom location for the configuration file with
+ the \l {Supported Environment Variables in Qt Quick Controls}
+ {QT_QUICK_CONTROLS_CONF} environment variable.
+
+ \section1 Controls Section
+
+ The following values can be specified in a \c Controls section of the
+ configuration file:
+
+ \table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c Style
+ \li Specifies the style to run the application with.
+ The value can be the name of one of the \l {Available Styles}{built-in styles}
+ or a \l {Creating a Custom Style}{custom style}.
+ \row
+ \li \c FallbackStyle
+ \li Specifies the style to use for controls that are not implemented.
+ The style must be one of the \l {Available Styles}{built-in styles}.
+ By default, the \l {Basic Style}{Basic} style is used.
+ \endtable
+
+ \section1 Imagine Section
+
+ The following table lists values that can be used to configure the
+ \l {Imagine style} in an \c Imagine section of the configuration file:
+
+ \include qquickimaginestyle.qdocinc conf
+
+ \section1 Material Section
+
+ The following table lists values that can be used to configure the
+ \l {Material style} in a \c Material section of the configuration file:
+
+ \include qquickmaterialstyle.qdocinc conf
+
+ \section1 Universal Section
+
+ The following table lists values that can be used to configure the
+ \l {Universal style} in a \c Universal section of the configuration file:
+
+ \include qquickuniversalstyle.qdocinc conf
+
+ \section1 Font Configuration
+
+ The default \l {Control::font}{font} can be specified in a \c Font sub-group
+ in each style's section in the configuration file. The \c Font sub-group can
+ be defined in two alternative ways:
+
+ \code
+ [Basic]
+ Font\Family=Open Sans
+ Font\PixelSize=20
+
+ [Material\Font]
+ Family=Open Sans
+ PixelSize=20
+ \endcode
+
+ Supported font attributes:
+ \table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c Family
+ \li The \l {QFont::family}{font family}.
+ \row
+ \li \c PointSize
+ \li The \l {QFont::pointSizeF}{point size}.
+ \row
+ \li \c PixelSize
+ \li The \l {QFont::pixelSize}{pixel size}.
+ \row
+ \li \c StyleHint
+ \li The \l {QFont::styleHint}{style hint}.
+ Available values: \c SansSerif, \c Helvetica, \c Serif, \c Times, \c TypeWriter, \c Courier,
+ \c OldEnglish, \c Decorative, \c Monospace, \c Fantasy, \c Cursive.
+ \row
+ \li \c Weight
+ \li The \l {QFont::}{weight}. Qt uses a weighting scale from \c 1 to \c 1000 compatible with OpenType. A weight of \c 1 will be thin,
+ whilst \c 1000 will be extremely black.
+ Available pre-defined weights: \c Thin (100), \c ExtraLight (200), \c Light (300), \c Normal (400),
+ \c Medium (500), \c DemiBold (600), \c Bold (700), \c ExtraBold (800),
+ \c Black (900).
+ \row
+ \li \c Style
+ \li The \l {QFont::}{style}.
+ Available values: \c StyleNormal, \c StyleItalic, \c StyleOblique.
+ \endtable
+
+ \section1 Palette Configuration
+
+ The default \c palette can be configured for each style using the
+ \c Palette sub-group in the configuration file. The \c Palette sub-group can be
+ defined in two alternative ways:
+
+ \code
+ [Fusion]
+ Palette\Window=#dedede
+ Palette\WindowText=#212121
+ \endcode
+
+ or:
+ \code
+ [Fusion\Palette]
+ Window=#dedede
+ WindowText=#212121
+ \endcode
+
+ See \l [QtQuick]{Palette} QML type for more information.
+
+ \section1 Using the Configuration File in a Project
+
+ In order to make it possible for Qt Quick Controls to find the configuration file,
+ it must be built into application's resources using the \l {The Qt Resource System}.
+ Here's an example \c .qrc file:
+
+ \code
+ <!DOCTYPE RCC><RCC version="1.0">
+ <qresource prefix="/">
+ <file>qtquickcontrols2.conf</file>
+ </qresource>
+ </RCC>
+ \endcode
+
+ \note Qt Quick Controls uses a file selector to load the configuration file. It
+ is possible to provide a different configuration file for different platforms and
+ locales. See \l QFileSelector documentation for more details.
+
+ Finally, the \c .qrc file must be listed in the application's \c .pro file so that
+ the build system knows about it. For example:
+
+ \code
+ RESOURCES = application.qrc
+ \endcode
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \li \l{Supported Environment Variables in Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-containers.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-containers.qdoc
new file mode 100644
index 0000000000..bd840ebec8
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-containers.qdoc
@@ -0,0 +1,89 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-containers.html
+ \title Container Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for container controls
+
+ Qt Quick Controls offers a selection of container-like controls.
+
+ \annotatedlist qtquickcontrols2-containers
+
+ Each type of container can be used to group a set of controls together.
+ The following sections offer guidelines for choosing the appropriate type
+ of container, depending on the use case.
+
+ \section1 ApplicationWindow Control
+
+ \image qtquickcontrols2-applicationwindow-wireframe.png
+
+ \l ApplicationWindow creates the root window of an application, and makes
+ it easy to add an optional header and footer to that window.
+
+ \section1 Frame Control
+
+ \image qtquickcontrols2-frame.png
+
+ \l Frame is used to layout a logical group of controls together, within
+ a visual frame.
+
+ \section1 GroupBox Control
+
+ \image qtquickcontrols2-groupbox.png
+
+ \l GroupBox is used to layout a logical group of controls together,
+ within a titled visual frame.
+
+ \section1 Page Control
+
+ \image qtquickcontrols2-page-wireframe.png
+
+ \l Page provides page-specific header and footer items.
+ It is perfectly possible to use ApplicationWindow for setting the header
+ and the footer, but if you have a header and footer which varies per
+ screen, then it is better to use \l Page.
+
+ \section1 Pane Control
+
+ \image qtquickcontrols2-pane.png
+
+ \l Pane provides a background color that matches with the application
+ style and theme. Pane does not provide a layout of its own, but requires
+ you to position its contents, for instance by using a \l RowLayout or
+ a \l ColumnLayout.
+
+ \section1 ScrollView Control
+
+ \image qtquickcontrols2-scrollview-wireframe.png
+
+ \l ScrollView provides scrolling for user-defined content.
+
+ \section1 StackView Control
+
+ \image qtquickcontrols2-stackview-wireframe.png
+
+ \l StackView organizes content pages into a stack using a last-in-first-out
+ principle: the last item to be "pushed" onto the stack is the first one to
+ be removed, and the top-most item is always the one that is visible.
+
+ \section1 SwipeView Control
+
+ \image qtquickcontrols2-swipeview-wireframe.png
+
+ \l SwipeView organizes content pages into a swipable strip.
+
+ \section1 TabBar Control
+
+ \image qtquickcontrols2-tabbar-wireframe.png
+
+ \l TabBar organizes content pages into tabs.
+
+ \section1 ToolBar Control
+
+ \image qtquickcontrols2-toolbar.png
+
+ \l ToolBar is a container of application-wide and context-sensitive
+ actions and controls.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-cppclasses.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-cppclasses.qdoc
new file mode 100644
index 0000000000..10ae30a689
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-cppclasses.qdoc
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \module QtQuickControls2
+ \keyword Qt Quick Controls C++ Classes
+ \title Qt Quick Controls C++ Classes
+ \keyword Qt Quick Controls 2 C++ Classes
+ \ingroup modules
+ \qtcmakepackage QuickControls2
+ \qtvariable quickcontrols2
+
+ \brief Provides classes for setting up the controls from C++.
+
+ The C++ types can be included into your application using the following
+ include statement:
+
+ \code
+ #include <QtQuickControls2>
+ \endcode
+
+ \note If you are using a few classes from this module, we recommend including
+ those specific classes only instead of the module.
+
+ To link against the corresponding C++ libraries, add the following to your
+ qmake project file:
+
+ \code
+ QT += quickcontrols2
+ \endcode
+
+ The \l{Qt Quick Controls} page contains information about how to use the
+ module.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-customize.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-customize.qdoc
new file mode 100644
index 0000000000..e30d393771
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-customize.qdoc
@@ -0,0 +1,1033 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-customize.html
+ \keyword Customizing Qt Quick Controls 2
+ \title Customizing Qt Quick Controls
+ \brief A set of UI controls to create user interfaces in Qt Quick
+
+ Qt Quick Controls consist of a hierarchy (tree) of items. In order to
+ provide a custom look and feel, the default QML implementation of each
+ item can be replaced with a custom one.
+
+ \section1 Customizing a Control
+
+ Sometimes you'll want to create a "one-off" look for a specific part of
+ your UI, and use a complete style everywhere else. Perhaps you're happy
+ with the style you're using, but there's a certain button that has some
+ special significance.
+
+ The first way to create this button is to simply define it in-place,
+ wherever it is needed. For example, perhaps you're not satisfied with the
+ Basic style's Button having square corners. To make them rounded, you
+ can override the \l {Control::}{background} item and set the radius
+ property of Rectangle:
+
+ \include customize-button-background.qdocinc file
+
+ \note as the different items that make up a control in any given style are
+ designed to work together, it may be necessary to override other items to
+ get the look you're after. In addition, not all styles can be customized.
+ See the note in \l {Customization Reference} for more information.
+
+ The second way to create the button is good if you plan to use your rounded
+ button in several places. It involves moving the code into its own QML file
+ within your project.
+
+ For this approach, we'll copy the background code from the Basic style's
+ \c Button.qml. This file can be found in the following path in your Qt
+ installation:
+
+ \c {$QTDIR/qml/QtQuick/Controls/Basic/Button.qml}
+
+ After doing that, we'll simply add the following line:
+
+ \code
+ radius: 4
+ \endcode
+
+ To avoid confusion with the controls in the
+ module itself, we'll call the file \c MyButton.qml. To use the control in
+ your application, refer to it by its filename:
+
+ \qml
+ import QtQuick.Controls
+
+ ApplicationWindow {
+ MyButton {
+ text: qsTr("A Special Button")
+ }
+ }
+ \endqml
+
+ The third way to create the button is a bit more structured, both in terms
+ of where the file sits in the file system and how it is used in QML. First,
+ copy an existing file as you did above, but this time, put it into a
+ subfolder in your project named (for example) \c controls. To use the
+ control, first import the folder into a namespace:
+
+ \qml
+ import QtQuick.Controls
+ import "controls" as MyControls
+
+ ApplicationWindow {
+ MyControls.Button {
+ text: qsTr("A Special Button")
+ }
+ }
+ \endqml
+
+ As you now have the \c MyControls namespace, you can name the controls after
+ their actual counterparts in the Qt Quick Controls module. You can repeat
+ this process for any control that you wish to add.
+
+ An added benefit of these three methods is that it's not necessary to
+ implement the template from scratch.
+
+ \note the three approaches mentioned here do not work for customizing the
+ attached \l ToolTip, as that is a shared item created internally. To do
+ a one-off customization of a \c ToolTip, see \l {Custom Tool Tips}. To
+ customize the attached \c ToolTip, it must be provided as part of
+ \l {Creating a Custom Style}{your own style}.
+
+ \section1 Creating a Custom Style
+
+ There are several ways to go about creating your own styles. Below, we'll
+ explain the various approaches.
+
+ \section2 Definition of a Style
+
+ In Qt Quick Controls, a style is essentially a set of QML files within a
+ single directory. There are four requirements for a style to be
+ \l {Using Styles in Qt Quick Controls}{usable}:
+
+ \list
+ \li At least one QML file whose name matches a control (for example,
+ \c Button.qml) must exist.
+ \li Each QML file must contain the relevant type from the \l {Qt Quick Templates 2}
+ {QtQuick.Templates} import as the root item. For example,
+ Button.qml must contain a Button template as its root item.
+
+ If we instead used the corresponding type from the \l {Qt Quick Controls}
+ {QtQuick.Controls} import as we did in the previous section, it would not work:
+ the control we were defining would try to derive from itself.
+ \li A \l {Module Definition qmldir Files}{qmldir} file must exist alongside
+ the QML file(s). Below is an example of a simple \c qmldir file for a style that
+ provides a button:
+
+ \badcode
+ module MyStyle
+ Button 2.15 Button.qml
+ \endcode
+
+ If you're using \l {Compile-Time Style Selection}{compile-time style
+ selection}, the qmldir should also import the fallback style:
+
+ \badcode
+ # ...
+ import QtQuick.Controls.Basic auto
+ \endcode
+
+ This can also be done for \l {Run-Time Style Selection}{run-time style selection}
+ instead of using, for example, \l QQuickStyle::setFallbackStyle().
+
+ The directory structure for such a style looks like this:
+
+ \badcode
+ MyStyle
+ ├─── Button.qml
+ └─── qmldir
+ \endcode
+ \li The files must be in a directory that is findable via the \l[QtQml]{QML Import Path}.
+
+ For example, if the path to \e MyStyle directory mentioned above was
+ \c /home/user/MyApp/MyStyle, then \c /home/user/MyApp must be added to
+ the QML import path.
+
+ To \l {Using Styles in Qt Quick Controls}{use} \e MyStyle in \e MyApp,
+ refer to it by name:
+
+ \list
+ \li \c {./MyApp -style MyStyle}
+ \endlist
+
+ The style name must match the casing of the style directory; passing
+ \e mystyle or \e MYSTYLE is not supported.
+ \endlist
+
+ By default, the styling system uses the Basic style as a fallback for
+ controls that aren't implemented. To customize or extend any other built-in
+ style, it is possible to specify a different fallback style using
+ \l[QtQuickControls2]{QQuickStyle}.
+
+ What this means is that you can implement as many controls as you like for
+ your custom style, and place them almost anywhere. It also allows users to
+ create their own styles for your application.
+
+ \section3 Previewing Custom Styles in Qt Quick Designer
+
+ Using the approach above, it is possible to preview a custom style
+ in Qt Quick Designer. In order to do so,
+ ensure that the project has a
+ \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file,
+ and that the following entry exists:
+
+ \badcode
+ [Controls]
+ Style=MyStyle
+ \endcode
+
+ For more information, take a look at the
+ \l {Qt Quick Controls - Flat Style}{Flat Style example}.
+
+ \section2 Style-specific C++ Extensions
+
+ Sometimes you may need to use C++ to extend your custom style. There are two
+ ways to expose such types to QML:
+
+ \list
+ \li If the style that uses the type is the only style used by an application,
+ it's enough to register it with the QML engine via qmlRegisterType():
+
+ \code
+ qmlRegisterType<ACoolCppItem>("MyApp", 1, 0, "ACoolItem");
+ \endcode
+
+ See \l {Using C++ Data From QML} for more information about this.
+ \li If the style that uses the type is one of many styles used by an
+ application, it may be better to only register it when necessary. This
+ is the point at which it would make sense to implement your own
+ \l {Creating C++ Plugins for QML}{QML plugin}.
+
+ Using a plugin as part of your style is not that much different from
+ using a set of QML files. The only difference is that the plugin and
+ its \c qmldir file must be present in the same directory as the QML
+ files.
+ \endlist
+
+ \section3 Considerations for custom styles
+
+ When implementing your own style and customizing controls, there are some
+ points to keep in mind to ensure that your application is as performant as
+ possible.
+
+ \section4 Avoid assigning an id to styles' implementations of item delegates
+
+ As explained in \l {Definition of a Style}, when you implement your
+ own style for a control, you start off with the relevant template for
+ that control. For example, a style's \c Button.qml will be structured
+ similarly to this:
+
+ \qml
+ T.Button {
+ // ...
+
+ background: Rectangle {
+ // ...
+ }
+
+ contentItem: Text {
+ // ...
+ }
+
+ // ...
+ }
+ \endqml
+
+ When you use a Button in your application, the \c background and
+ \c contentItem items will be created and parented to the root \c Button
+ item:
+
+ \qml
+ // Creates the Button root item, the Rectangle background,
+ // and the Text contentItem.
+ Button {
+ text: qsTr("Confirm")
+ }
+ \endqml
+
+ Suppose you then needed to do a one-off customization of the Button (as
+ explained in \l {Customizing a Control}):
+
+ \include customize-button-background.qdocinc file
+
+ In QML, this would normally result in both the default \c background
+ implementation and the one-off, custom \c background items being created.
+ Qt Quick Controls uses a technique that avoids creating both items, and
+ instead only creates the custom \c background, greatly improving the
+ creation performance of controls.
+
+ This technique relies on the absence of an \l {The id Attribute}{id} in the
+ style's implementation of that item. If an id is assigned, the technique
+ cannot work, and both items will be created. For example, it can be
+ tempting to assign an id to the \c background or \c contentItem so that
+ other objects within the file can refer to those items:
+
+ \qml
+ T.Button {
+ // ...
+
+ background: Rectangle {
+ id: backgroundRect
+ // ...
+ }
+
+ contentItem: Text {
+ // Use backgroundRect in some way...
+ }
+
+ // ...
+ }
+ \endqml
+
+ With this code, every time a Button instance with a customized background
+ is created, both backgrounds will be created, resulting in sub-optimal
+ creation performance.
+
+ Prior to Qt 5.15, the old, unused background would be deleted to release
+ the resources associated with it. However, as the control does not own the
+ items, it should not delete them. As of Qt 5.15, old items are no longer
+ deleted, and so the \c backgroundRect item will live longer than it needs
+ to—typically until the application exits. Although the old item will be
+ hidden, visually unparented from the control, and removed from the
+ accessibility tree, it is important to keep the creation time and memory
+ usage of these unused items in mind when assigning an id in this context.
+
+ \section4 Avoid imperative assignments of custom items
+
+ The technique mentioned in the section above only works when an item is
+ \l {Prefer Declarative Bindings Over Imperative Assignments}{declaratively}
+ assigned for the first time, and so imperative assignments will result in
+ orphaned items. Always use declarative bindings to assign custom items
+ when possible.
+
+ \section4 Don't import QtQuick.Controls in QML implementations
+
+ When writing the QML for your style's implementation of a control,
+ it's important not to import \c {QtQuick.Controls}. Doing so will
+ prevent the QML from being compiled by the QML compiler.
+
+ \section4 Implement types used by other types
+
+ Suppose you were using ScrollViews in your application, and decided that
+ you want to customize their scroll bars. It is tempting to just implement a
+ custom ScrollBar.qml and have ScrollView pick up the customized ScrollBar
+ automatically. However, this will not work. You must implement both
+ ScrollBar.qml \e and ScrollView.qml.
+
+ \section3 Attached properties
+
+ It is common for a style to have certain properties or attributes that
+ apply to all controls. \l {Attached Properties and Attached Signal
+ Handlers}{Attached properties} are a great way of extending an item in QML
+ without having to modify any existing C++ belonging to that item. For
+ example, both the \l {Material Style}{Material} and \l {Universal
+ Style}{Universal} styles have an attached theme property that controls
+ whether an item and its children will be rendered in a light or dark theme.
+
+ As an example, let's add an attached property that controls elevation. Our
+ style will illustrate the elevation with a drop shadow; the higher the
+ elevation, the larger the shadow.
+
+ The first step is to \l {Qt Creator: Project Types}{create a new Qt Quick
+ Controls application} in Qt Creator. After that, we
+ \l {Qt Creator: Creating C++ Classes}{add a C++ type} that stores the elevation. Since
+ the type will be used for every control supported by our style, and because
+ we may wish to add other attached properties later on, we'll call it
+ MyStyle. Here is \c MyStyle.h:
+
+ \code
+ #ifndef MYSTYLE_H
+ #define MYSTYLE_H
+
+ #include <QObject>
+ #include <QtQml>
+
+ class MyStyle : public QObject
+ {
+ Q_OBJECT
+ Q_PROPERTY(int elevation READ elevation WRITE setElevation NOTIFY elevationChanged)
+
+ public:
+ explicit MyStyle(QObject *parent = nullptr);
+
+ static MyStyle *qmlAttachedProperties(QObject *object);
+
+ int elevation() const;
+ void setElevation(int elevation);
+
+ signals:
+ void elevationChanged();
+
+ private:
+ int m_elevation;
+ };
+
+ QML_DECLARE_TYPEINFO(MyStyle, QML_HAS_ATTACHED_PROPERTIES)
+
+ #endif // MYSTYLE_H
+ \endcode
+
+ \c MyStyle.cpp:
+
+ \code
+ #include "mystyle.h"
+
+ MyStyle::MyStyle(QObject *parent) :
+ QObject(parent),
+ m_elevation(0)
+ {
+ }
+
+ MyStyle *MyStyle::qmlAttachedProperties(QObject *object)
+ {
+ return new MyStyle(object);
+ }
+
+ int MyStyle::elevation() const
+ {
+ return m_elevation;
+ }
+
+ void MyStyle::setElevation(int elevation)
+ {
+ if (elevation == m_elevation)
+ return;
+
+ m_elevation = elevation;
+ emit elevationChanged();
+ }
+ \endcode
+
+ The \c MyStyle type is special in the sense that it shouldn't be
+ instantiated, but rather used for its attached properties. For that reason,
+ we register it in the following manner in \c main.cpp:
+
+ \code
+ #include <QGuiApplication>
+ #include <QQmlApplicationEngine>
+
+ #include "mystyle.h"
+
+ int main(int argc, char *argv[])
+ {
+ QGuiApplication app(argc, argv);
+
+ qmlRegisterUncreatableType<MyStyle>("MyStyle", 1, 0, "MyStyle", "MyStyle is an attached property");
+
+ QQmlApplicationEngine engine;
+ // Make the directory containing our style known to the QML engine.
+ engine.addImportPath(":/");
+ engine.load(QUrl(QLatin1String("qrc:/main.qml")));
+
+ return app.exec();
+ }
+ \endcode
+
+ We then copy \c Button.qml from the Basic style in
+ \c {$QTDIR/qml/QtQuick/Controls/Basic/} into a new \c myproject folder in our
+ project directory. Add the newly copied \c Button.qml to \c qml.qrc, which is
+ the resource file that contains our QML files.
+
+ Next, we add a drop shadow to the \l {Control::}{background} delegate of
+ the Button:
+
+ \code
+ // ...
+ import QtGraphicalEffects
+ import MyStyle
+ // ...
+
+ background: Rectangle {
+ // ...
+
+ layer.enabled: control.enabled && control.MyStyle.elevation > 0
+ layer.effect: DropShadow {
+ verticalOffset: 1
+ color: control.visualFocus ? "#330066ff" : "#aaaaaa"
+ samples: control.MyStyle.elevation
+ spread: 0.5
+ }
+ }
+ \endcode
+
+ Note that we:
+
+ \list
+ \li Don't bother using the drop shadow when the elevation is \c 0
+ \li Change the shadow's color depending on whether or not the button has
+ focus
+ \li Make the size of the shadow depend on the elevation
+ \endlist
+
+ To try out the attached property, we create a \l Row with two Buttons in
+ \c main.qml:
+
+ \qml
+ import QtQuick
+ import QtQuick.Controls
+
+ import MyStyle 1.0
+
+ ApplicationWindow {
+ id: window
+ width: 400
+ height: 400
+ visible: true
+
+ Row {
+ spacing: 20
+ anchors.centerIn: parent
+
+ Button {
+ text: "Button 1"
+ }
+ Button {
+ text: "Button 2"
+ MyStyle.elevation: 10
+ }
+ }
+ }
+ \endqml
+
+ One button has no elevation, and the other has an elevation of \c 10.
+
+ With that in place, we can run our example. To tell the application to
+ use our new style, we pass \c {-style MyStyle} as an application
+ argument, but there are \l {Using Styles in Qt Quick Controls}{many
+ ways} to specify the style to use.
+
+ The end result:
+
+ \image qtquickcontrols2-customize-buttons.png
+
+ Note that the \c {import MyStyle 1.0} statement is only necessary
+ because we are using the attached property belonging to \c MyStyle.
+ Both buttons will use our custom style, even if we were to remove the
+ import.
+
+ \section1 Customization Reference
+
+ The following snippets present examples where the Basic style's controls
+ have been customized using the same approach as the
+ \l {Customizing a Control} section. The code can be used as a starting
+ point to implement a custom look and feel.
+
+ \note The \l {macOS Style}{macOS} and \l {Windows Style}{Windows} styles
+ are not suitable for customizing.
+ \include customizing-native-styles.qdocinc
+
+ \section2 Customizing ApplicationWindow
+
+ ApplicationWindow consists of one visual item:
+ \l {ApplicationWindow::background}{background}.
+
+ \code
+ import QtQuick
+ import QtQuick.Controls
+
+ ApplicationWindow {
+ visible: true
+
+ background: Rectangle {
+ gradient: Gradient {
+ GradientStop { position: 0; color: "#ffffff" }
+ GradientStop { position: 1; color: "#c1bbf9" }
+ }
+ }
+ }
+ \endcode
+
+
+ \section2 Customizing BusyIndicator
+
+ BusyIndicator consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{contentItem}.
+
+ \image qtquickcontrols2-busyindicator-custom.png
+
+ \snippet qtquickcontrols2-busyindicator-custom.qml file
+
+
+ \section2 Customizing Button
+
+ Button consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-button-custom.png
+
+ \snippet qtquickcontrols2-button-custom.qml file
+
+
+ \section2 Customizing CheckBox
+
+ CheckBox consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-checkbox-custom.png
+
+ \snippet qtquickcontrols2-checkbox-custom.qml file
+
+ \section2 Customizing CheckDelegate
+
+ CheckDelegate consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-checkdelegate-custom.png
+
+ \snippet qtquickcontrols2-checkdelegate-custom.qml file
+
+
+ \section2 Customizing ComboBox
+
+ ComboBox consists of \l {Control::background}{background},
+ \l {Control::contentItem}{content item}, \l {ComboBox::popup}{popup},
+ \l {ComboBox::indicator}{indicator}, and \l {ComboBox::delegate}{delegate}.
+
+ \image qtquickcontrols2-combobox-custom.png
+
+ \snippet qtquickcontrols2-combobox-custom.qml file
+
+ As explained in \l {ComboBox Model Roles}, ComboBox supports multiple
+ types of models. If you know that your ComboBox instances will only
+ ever use one particular type of model, then it is possible to simplify
+ the code above.
+
+ For example, if your models will only ever be derived from
+ \l QAbstractItemModel and have more than one role, the following
+ binding is sufficient:
+
+ \code
+ text: model[control.textRole]
+ \endcode
+
+ However, if you want to support all standard models, the more complex
+ binding is necessary, and is explained in detail below.
+
+ \quotefromfile qtquickcontrols2-combobox-custom.qml
+ \skipto control.textRole
+ \printto Array.isArray
+
+ The first line checks if the \l {ComboBox::}{textRole} property has
+ been set. It is only necessary to set this property if the model
+ has more than one role.
+
+ \printline Array.isArray
+
+ If \c textRole has been set, the next step is to check if the model
+ is an array.
+
+ If it is an array, the \c modelData context property will be available,
+ and so it must be used. Square bracket notation is used to access
+ the property of modelData since the property name is not known ahead
+ of time.
+
+ If it is not an array, the \c model context property must be used
+ instead.
+
+ \printline modelData
+
+ Finally, if \c textRole has not been set, then the model only has one
+ role, and so it is sufficient to use the value of \c modelData.
+
+ \section2 Customizing DelayButton
+
+ DelayButton consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-delaybutton-custom.png
+
+ \snippet qtquickcontrols2-delaybutton-custom.qml file
+
+
+ \section2 Customizing Dial
+
+ Dial consists of two visual items: \l {Control::background}{background}
+ and \l {Dial::handle}{handle}.
+
+ \image qtquickcontrols2-dial-custom.png
+
+ \snippet qtquickcontrols2-dial-custom.qml file
+
+
+ \section2 Customizing Drawer
+
+ Drawer can have a visual \l {Control::background}{background}
+ item.
+
+ \code
+ background: Rectangle {
+ Rectangle {
+ x: parent.width - 1
+ width: 1
+ height: parent.height
+ color: "#21be2b"
+ }
+ }
+ \endcode
+
+
+ \section2 Customizing Frame
+
+ Frame consists of one visual item: \l {Control::background}{background}.
+
+ \image qtquickcontrols2-frame-custom.png
+
+ \snippet qtquickcontrols2-frame-custom.qml file
+
+
+ \section2 Customizing GroupBox
+
+ GroupBox consists of two visual items: \l {Control::background}{background}
+ and \l {GroupBox::label}{label}.
+
+ \image qtquickcontrols2-groupbox-custom.png
+
+ \snippet qtquickcontrols2-groupbox-custom.qml file
+
+
+ \section2 Customizing ItemDelegate
+
+ ItemDelegate consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-itemdelegate-custom.png
+
+ \snippet qtquickcontrols2-itemdelegate-custom.qml file
+
+
+ \section2 Customizing Label
+
+ Label can have a visual \l {Label::background}{background} item.
+
+ \image qtquickcontrols2-label-custom.png
+
+ \snippet qtquickcontrols2-label-custom.qml file
+
+
+ \section2 Customizing Menu
+
+ \list
+ \li \l Menu consists of a visual \l {Popup::background}{background} item.
+ \li \l MenuItem consists of four visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{content item}, \l {AbstractButton::}{indicator}, and
+ \l {MenuItem::}{arrow}.
+ \li \l MenuSeparator consists of a visual \l {Control::background}{background} and
+ \l {Control::contentItem}{content item}.
+ \endlist
+
+ \image qtquickcontrols2-menu-custom.png
+
+ \quotefromfile qtquickcontrols2-menu-custom.qml
+ \skipto import QtQuick
+ \printuntil import QtQuick.Controls
+ \skipto Menu
+ \printto eof
+
+
+ \section2 Customizing MenuBar
+
+ MenuBar can have a visual \l {Control::background}{background} item,
+ and MenuBarItem consists of two visual items: \l {Control::background}
+ {background} and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-menubar-custom.png
+
+ \quotefromfile qtquickcontrols2-menubar-custom.qml
+ \skipto import QtQuick
+ \printuntil import QtQuick.Controls
+ \skipto MenuBar
+ \printto eof
+
+
+ \section2 Customizing PageIndicator
+
+ PageIndicator consists of a \l {Control::background}{background}, \l {Control::contentItem}{content item}, and \l {PageIndicator::delegate}{delegate}.
+
+ \image qtquickcontrols2-pageindicator-custom.png
+
+ \snippet qtquickcontrols2-pageindicator-custom.qml file
+
+
+ \section2 Customizing Pane
+
+ Pane consists of a \l {Control::background}{background}.
+
+ \image qtquickcontrols2-pane-custom.png
+
+ \snippet qtquickcontrols2-pane-custom.qml file
+
+
+ \section2 Customizing Popup
+
+ Popup consists of a \l {Popup::background}{background} and
+ \l {Popup::contentItem}{content item}.
+
+ \image qtquickcontrols2-popup-custom.png
+
+ \quotefromfile qtquickcontrols2-popup-custom.qml
+ \skipto import QtQuick
+ \printuntil import QtQuick.Controls
+ \codeline
+ \skipto Popup
+ \printuntil {
+ \printuntil }
+ \printuntil }
+ \printuntil }
+
+
+ \section2 Customizing ProgressBar
+
+ ProgressBar consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-progressbar-custom.png
+
+ \snippet qtquickcontrols2-progressbar-custom.qml file
+
+
+ \section2 Customizing RadioButton
+
+ RadioButton consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-radiobutton-custom.png
+
+ \snippet qtquickcontrols2-radiobutton-custom.qml file
+
+
+ \section2 Customizing RadioDelegate
+
+ RadioDelegate consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-radiodelegate-custom.png
+
+ \snippet qtquickcontrols2-radiodelegate-custom.qml file
+
+
+ \section2 Customizing RangeSlider
+
+ RangeSlider consists of three visual items:
+ \l {Control::background}{background},
+ \l {RangeSlider::first}{first.handle} and
+ \l {RangeSlider::second.handle}{second.handle}.
+
+ \image qtquickcontrols2-rangeslider-custom.png
+
+ \snippet qtquickcontrols2-rangeslider-custom.qml file
+
+
+ \section2 Customizing RoundButton
+
+ RoundButton can be customized in the same manner as
+ \l {Customizing Button}{Button}.
+
+
+ \section2 Customizing ScrollBar
+
+ ScrollBar consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-scrollbar-custom.png
+
+ \snippet qtquickcontrols2-scrollbar-custom.qml file
+
+
+ \section2 Customizing ScrollIndicator
+
+ ScrollIndicator consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-scrollindicator-custom.png
+
+ \snippet qtquickcontrols2-scrollindicator-custom.qml file
+
+
+ \section2 Customizing ScrollView
+
+ ScrollView consists of a \l {Control::background}{background} item,
+ and horizontal and vertical scroll bars.
+
+ \image qtquickcontrols2-scrollview-custom.png
+
+ \snippet qtquickcontrols2-scrollview-custom.qml file
+
+
+ \section2 Customizing Slider
+
+ Slider consists of two visual items: \l {Control::background}{background},
+ and \l {Slider::handle}{handle}.
+
+ \image qtquickcontrols2-slider-custom.png
+
+ \snippet qtquickcontrols2-slider-custom.qml file
+
+
+ \section2 Customizing SpinBox
+
+ SpinBox consists of four visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem}, \l {SpinBox::up.indicator}{up indicator},
+ and \l {SpinBox::down.indicator}{down indicator}.
+
+ \image qtquickcontrols2-spinbox-custom.png
+
+ \snippet qtquickcontrols2-spinbox-custom.qml file
+
+
+ \section2 Customizing SplitView
+
+ SplitView consists of a visual \l {SplitView::handle}{handle} delegate.
+
+ \image qtquickcontrols2-splitview-custom.png
+
+ \snippet qtquickcontrols2-splitview-custom.qml 1
+
+
+ \section2 Customizing StackView
+
+ StackView can have a visual \l {Control::background}{background}
+ item, and it allows customizing the transitions that are used for
+ push, pop, and replace operations.
+
+ \snippet qtquickcontrols2-stackview-custom.qml file
+
+
+ \section2 Customizing SwipeDelegate
+
+ SwipeDelegate consists of six visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{content item}, \l {AbstractButton::indicator}{indicator},
+ \c swipe.left, \c swipe.right, and \c swipe.behind.
+
+ \image qtquickcontrols2-swipedelegate-custom.png
+
+ \snippet qtquickcontrols2-swipedelegate-custom.qml file
+
+
+ \section2 Customizing SwipeView
+
+ SwipeView can have a visual \l {Control::background}{background}
+ item. The navigation is implemented by the \l {Control::contentItem}
+ {content item}.
+
+ \snippet qtquickcontrols2-swipeview-custom.qml file
+
+
+ \section2 Customizing Switch
+
+ Switch consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{content item} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-switch-custom.png
+
+ \snippet qtquickcontrols2-switch-custom.qml file
+
+ \section2 Customizing SwitchDelegate
+
+ SwitchDelegate consists of three visual items: \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem} and \l {AbstractButton::indicator}{indicator}.
+
+ \image qtquickcontrols2-switchdelegate-custom.png
+
+ \snippet qtquickcontrols2-switchdelegate-custom.qml file
+
+
+ \section2 Customizing TabBar
+
+ TabBar consists of two visual items: \l {Control::background}{background},
+ and \l {Control::contentItem}{contentItem}.
+
+ \image qtquickcontrols2-tabbar-custom.png
+
+ \snippet qtquickcontrols2-tabbar-custom.qml file
+
+
+ \section2 Customizing TabButton
+
+ TabButton can be customized in the same manner as
+ \l {Customizing Button}{Button}.
+
+
+ \section2 Customizing TextArea
+
+ TextArea consists of a \l {TextArea::background}{background} item.
+
+ \image qtquickcontrols2-textarea-custom.png
+
+ \snippet qtquickcontrols2-textarea-custom.qml file
+
+
+ \section2 Customizing TextField
+
+ TextField consists of a \l {TextField::background}{background} item.
+
+ \image qtquickcontrols2-textfield-custom.png
+
+ \snippet qtquickcontrols2-textfield-custom.qml file
+
+
+ \section2 Customizing ToolBar
+
+ ToolBar consists of one visual item: \l {Control::background}{background}.
+
+ \image qtquickcontrols2-toolbar-custom.png
+
+ \snippet qtquickcontrols2-toolbar-custom.qml file
+
+
+ \section2 Customizing ToolButton
+
+ ToolButton consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-toolbutton-custom.png
+
+ \snippet qtquickcontrols2-toolbutton-custom.qml file
+
+
+ \section2 Customizing ToolSeparator
+
+ ToolSeparator consists of two visual items: \l {Control::background}{background}
+ and \l {Control::contentItem}{content item}.
+
+ \image qtquickcontrols2-toolseparator-custom.png
+
+ \snippet qtquickcontrols2-toolseparator-custom.qml file
+
+
+ \section2 Customizing ToolTip
+
+ ToolTip consists of two visual items: \l {Popup::background}{background}
+ and \l {Popup::contentItem}{content item}.
+
+ \quotefromfile qtquickcontrols2-tooltip-custom.qml
+ \skipto import QtQuick
+ \printuntil import QtQuick.Controls
+ \skipto ToolTip
+ \printuntil }
+ \printuntil }
+ \printuntil }
+
+ \include qquicktooltip.qdocinc customize-note
+
+ \section2 Customizing Tumbler
+
+ Tumbler consists of three visual items:
+ \l {Control::background}{background},
+ \l {Control::contentItem}{contentItem}, and
+ \l {Tumbler::delegate}{delegate}.
+
+ \image qtquickcontrols2-tumbler-custom.png
+
+ \snippet qtquickcontrols2-tumbler-custom.qml file
+
+ If you want to define your own contentItem, use either a \l ListView or
+ \l PathView as the root item. For a wrapping Tumbler, use PathView:
+
+ \snippet qtquickcontrols2-tumbler-pathView.qml contentItem
+
+ For a non-wrapping Tumbler, use ListView:
+
+ \snippet qtquickcontrols2-tumbler-listView.qml contentItem
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-delegates.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-delegates.qdoc
new file mode 100644
index 0000000000..5d498ced1f
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-delegates.qdoc
@@ -0,0 +1,74 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-delegates.html
+ \title Delegate Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for delegate controls
+
+ Qt Quick Controls offers a selection of controls that are used as
+ delegates in views.
+
+ \annotatedlist qtquickcontrols2-delegates
+
+ Each type of delegate has its own specific target use case. The following
+ sections offer guidelines for choosing the appropriate type of delegate,
+ depending on the use case.
+
+ \section1 CheckDelegate Control
+
+ \image qtquickcontrols2-checkdelegate.gif
+
+ \l CheckDelegate presents a checkable control that can be toggled on
+ (checked) or off (unchecked). Check delegates are typically used to
+ select one or more options from a set of options.
+
+ \b {See also} \l {CheckBox Control}.
+
+ \section1 ItemDelegate Control
+
+ \image qtquickcontrols2-itemdelegate.gif
+
+ \l ItemDelegate presents a checkable control that can be pressed and
+ clicked by the user.
+
+ \section1 RadioDelegate Control
+
+ \image qtquickcontrols2-radiodelegate.gif
+
+ \l RadioDelegate presents a checkable control that can be toggled on
+ (checked) or off (unchecked). Radio delegates are typically used to select
+ one option from a set of options.
+
+ \b {See also} \l {RadioButton Control}.
+
+ \section1 SwipeDelegate Control
+
+ \image qtquickcontrols2-swipedelegate.gif
+
+ \l SwipeDelegate presents a view item that can be swiped left or right to
+ expose more options or information.
+
+ \section1 SwitchDelegate Control
+
+ \image qtquickcontrols2-switchdelegate.gif
+
+ \l SwitchDelegate presents a switchable delegate that can be toggled on or off.
+
+ \b {See also} \l {Switch Control}.
+
+ \section1 TreeViewDelegate Control
+
+ \image qtquickcontrols2-treeviewdelegate.png
+
+ A \l TreeViewDelegate is a delegate that can be assigned to the delegate property
+ of a TreeView.
+
+ \b {See also} \l {TreeView}.
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-deployment.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-deployment.qdoc
new file mode 100644
index 0000000000..daea9eccf0
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-deployment.qdoc
@@ -0,0 +1,73 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-deployment.html
+ \title Deploying Qt Quick Controls Applications
+
+ Deployment of Qt Quick Controls applications is very similar to
+ deployment of other types of Qt applications. However, there are a few
+ factors to consider.
+
+ \section1 Deploying an Application with Several Styles
+
+ Suppose you have an application that will be deployed to both Android and
+ Windows devices. To ensure that only the minimum set of files that are
+ necessary for the application to run are deployed to each device, you can
+ use file selectors. For example, your directory structure could look like
+ this:
+
+ \code
+ resources.qrc
+ main.qml
+ +windows/MyPage.qml
+ +windows/qtquickcontrols2.conf
+ +android/MyPage.qml
+ +android/qtquickcontrols2.conf
+ \endcode
+
+ In the project above, \c main.qml would import \c QtQuick.Controls, for
+ example, but shouldn't import, say, \c QtQuick.Controls.Material. Any code
+ that is style-specific is moved out into separate files; just as we've done
+ for \c MyPage.qml.
+
+ The \c +windows/qtquickcontrols2.conf file would contain configuration
+ options specific to the Universal style:
+
+ \code
+ [Controls]
+ Style=Universal
+
+ [Universal]
+ Theme=Dark
+ Accent=Red
+ \endcode
+
+ The \c +android/qtquickcontrols2.conf file would contain configuration
+ options specific to the Material style:
+
+ \code
+ [Controls]
+ Style=Material
+
+ [Material]
+ Theme=Light
+ Accent=Brown
+ \endcode
+
+ \section1 Static Builds
+
+ For dynamically built applications, it is not necessary to import a
+ specific style that should be usable by that application. For statically
+ built applications, Qt's build system must be involved to ensure that
+ QML plugins function as expected. Specifically, \c qmake uses
+ \c qmlimportscanner to scan the QML files in your application for import
+ statements. For this reason, any styles that should be usable by a
+ statically built application must explicitly import that style. Where the
+ import occurs is up to the developer, but it is recommended to follow the
+ approach mentioned in the \l {Deploying an Application with Several Styles}
+ section, so that only the minimum set of files that are necessary for a
+ particular device are deployed.
+
+ \sa {Deploying Qt Applications}, {Using Styles in Qt Quick Controls}
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-environment.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-environment.qdoc
new file mode 100644
index 0000000000..b939a6741a
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-environment.qdoc
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-environment.html
+ \title Supported Environment Variables in Qt Quick Controls
+
+ This page contains a list of all environment variables that Qt Quick Controls
+ supports. The environment variables are primarily meant for testing purposes, but
+ they can also be used to set system-wide defaults.
+
+ \table
+ \header
+ \li Variable
+ \li Description
+ \row
+ \li \c QT_QUICK_CONTROLS_STYLE
+ \li Specifies the default \l {Styling Qt Quick Controls}{Qt Quick Controls style}.
+ The value can be either one of the built-in styles, for example \c "Material",
+ or a custom style such as \c "MyStyle".
+ \row
+ \li \c QT_QUICK_CONTROLS_FALLBACK_STYLE
+ \li Specifies a fallback style for \l {Creating a Custom Style}{custom styles}.
+ The value can be one of the built-in styles, for example \c "Material",
+ \row
+ \li \c QT_QUICK_CONTROLS_CONF
+ \li Specifies the location of the \l {Qt Quick Controls configuration file}.
+ By default, the configuration file is loaded from the application's
+ resources in \c ":/qtquickcontrols2.conf".
+ \row
+ \li \c QT_QUICK_CONTROLS_HOVER_ENABLED
+ \li Specifies whether Qt Quick Controls use \l {Control::hoverEnabled}{hover effects}.
+ The value can be set to \c 0 or \c 1 to disable or enable hover effects, respectively.
+ \endtable
+
+ \l {Imagine style} specific environment variables:
+
+ \include qquickimaginestyle.qdocinc env
+
+ \l {Material style} specific environment variables:
+
+ \include qquickmaterialstyle.qdocinc env
+
+ \l {Universal style} specific environment variables:
+
+ \include qquickuniversalstyle.qdocinc env
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \li \l{Qt Quick Controls Configuration File}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-examples.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-examples.qdoc
new file mode 100644
index 0000000000..505c6200f5
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-examples.qdoc
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \group qtquickcontrols2-examples
+ \ingroup all-examples
+ \keyword Qt Quick Controls Examples
+ \title Qt Quick Controls Examples
+ \keyword Qt Quick Controls 2 Examples
+ \brief A collection of examples for \l {Qt Quick Controls}
+
+ These examples demonstrate creating user interfaces using \l {Qt Quick Controls}.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-fileselectors.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-fileselectors.qdoc
new file mode 100644
index 0000000000..edd7b76d81
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-fileselectors.qdoc
@@ -0,0 +1,116 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-fileselectors.html
+ \title Using File Selectors with Qt Quick Controls
+
+ \l {QFileSelector}{File selectors} provide a convenient way of selecting
+ file variants. Qt offers the platform name and the locale as built-in
+ selectors. Qt Quick Controls extends the built-in selectors with the name
+ (lowercase) of the style that an application is running with.
+
+ By using file selectors, style-specific tweaks can be applied without
+ creating a hard dependency to a style. From the available file variants,
+ only the selected QML file is loaded by the QML engine. Each file variant
+ can assume the context, that is, a specific style. This typically leads
+ to some code duplication, but on the other hand, cuts the aforementioned
+ hard dependency to the style, and leads to simpler and more efficient
+ QML code.
+
+ The following example demonstrates a custom rounded button that has a
+ styled drop shadow in the \l {Material Style}{Material style}, and looks
+ flat in other styles. The files are organized so that the Material version
+ of \c CustomButton.qml is placed into a \c +Material sub-directory.
+
+ \code
+ :/main.qml
+ :/CustomButton.qml
+ :/+Material/CustomButton.qml
+ \endcode
+
+ By default, \c main.qml will use \c CustomButton.qml for the \c CustomButton
+ type. However, when the application is run with the Material style, the
+ \c Material selector will be present and the \c +Material/CustomButton.qml
+ version will be used instead.
+
+ \code
+ // main.qml
+ import QtQuick
+ import QtQuick.Controls
+
+ ApplicationWindow {
+ id: window
+ visible: true
+
+ CustomButton {
+ text: "Button"
+ anchors.centerIn: parent
+ }
+ }
+ \endcode
+
+ The base implementation of the custom button is a simple rounded
+ flat button.
+
+ \code
+ // CustomButton.qml
+ import QtQuick
+ import QtQuick.Controls
+
+ Button {
+ id: control
+
+ background: Rectangle {
+ radius: width / 2
+ implicitWidth: 36
+ implicitHeight: 36
+ color: control.pressed ? "#ccc" : "#eee"
+ }
+ }
+ \endcode
+
+ The Material style's implementation of the custom button imports the
+ Material style, requests a dark theme to get light text, and creates
+ a drop shadow for the background.
+
+ \code
+ // +Material/CustomButton.qml
+ import QtQuick
+ import QtGraphicalEffects
+ import QtQuick.Controls
+ import QtQuick.Controls.Material
+
+ Button {
+ id: control
+
+ Material.theme: Material.Dark
+
+ background: Rectangle {
+ implicitWidth: 48
+ implicitHeight: 48
+ color: Material.accentColor
+ radius: width / 2
+
+ layer.enabled: control.enabled
+ layer.effect: DropShadow {
+ verticalOffset: 1
+ color: Material.dropShadowColor
+ samples: control.pressed ? 20 : 10
+ spread: 0.5
+ }
+ }
+ }
+ \endcode
+
+ \note It is recommended to use \l QQmlApplicationEngine, which internally
+ creates a \l QQmlFileSelector instance. This is all that is needed to take
+ QML file selectors into use.
+
+ \section1 Related Information
+ \list
+ \li \l {QFileSelector}
+ \li \l {QQmlFileSelector}
+ \li \l {Styling Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-focus.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-focus.qdoc
new file mode 100644
index 0000000000..ff73e560a0
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-focus.qdoc
@@ -0,0 +1,24 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-focus.html
+ \keyword Focus Management in Qt Quick Controls 2
+ \title Focus Management in Qt Quick Controls
+ \brief Overview of focus handling with Qt Quick Controls
+
+ Qt Quick Controls follows the standard
+ \l {Keyboard Focus in Qt Quick}{Qt Quick focus system}, while also
+ providing some added convenience. For example, the
+ \l {Control::}{focusPolicy} property can be used to control the ways in
+ which a control receives focus.
+
+ \section1 Focus Scope Controls
+
+ Qt Quick Controls offers a selection of controls that act as
+ \l {Acquiring Focus and Focus Scopes}{focus scopes}:
+
+ \annotatedlist qtquickcontrols2-focusscopes
+
+ \sa {Keyboard Focus in Qt Quick}
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-fusion.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-fusion.qdoc
new file mode 100644
index 0000000000..42fcd6e87c
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-fusion.qdoc
@@ -0,0 +1,69 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-fusion.html
+ \title Fusion Style
+
+ The Fusion style is a desktop-oriented style.
+
+ The Fusion style is a platform-agnostic style that offers a desktop-oriented
+ look and feel. It implements the same design language as the
+ \l {Qt Widget Gallery}{Fusion style for Qt Widgets}.
+
+ \image qtquickcontrols2-fusion.png
+
+ To run an application with the Fusion style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \note The Fusion style is not a native desktop style. The style runs on any
+ platform, and looks similar everywhere. Minor differences may occur due to
+ differences in the standard system palettes, available fonts, and font
+ rendering engines.
+
+ \section2 Customization
+
+ The Fusion style uses the standard system \l[QtQuick]{Palette}
+ to provide colors that match the desktop environment.
+
+ \image qtquickcontrols2-fusion-palettes.png
+
+ Custom palettes can be specified for any control,
+ \l{Popup::palette}{popup}, or \l{Window::palette}{application window}.
+ Explicit palette attributes are automatically propagated from parent to children,
+ overriding any system defaults for that attribute. In the following example,
+ the window and all three switches appear with a violet highlight color:
+
+ \table
+ \row
+ \li
+ \qml
+ import QtQuick 2.12
+ import QtQuick.Controls 2.12
+
+ ApplicationWindow {
+ visible: true
+
+ palette.highlight: "violet"
+
+ Column {
+ anchors.centerIn: parent
+
+ Switch { text: qsTr("First"); checked: true }
+ Switch { text: qsTr("Second"); checked: true }
+ Switch { text: qsTr("Third") }
+ }
+ }
+ \endqml
+ \li
+ \image qtquickcontrols2-fusion-violet.png
+ \endtable
+
+ \b {See also} \l {Basic Style}, \l {Material Style}, \l {Universal Style}
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-gettingstarted.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-gettingstarted.qdoc
new file mode 100644
index 0000000000..f8667579b6
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-gettingstarted.qdoc
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-gettingstarted.html
+ \keyword Getting Started with Qt Quick Controls 2
+ \title Getting Started with Qt Quick Controls
+
+ A basic example of a QML file that makes use of controls is shown here:
+
+ \qml
+ import QtQuick
+ import QtQuick.Controls
+
+ ApplicationWindow {
+ title: "My Application"
+ width: 640
+ height: 480
+ visible: true
+
+ Button {
+ text: "Push Me"
+ anchors.centerIn: parent
+ }
+ }
+ \endqml
+
+ \section1 Setting Up Controls from C++
+
+ Although QQuickView has traditionally been used to display QML files in a
+ C++ application, doing this means you can only set window properties from
+ C++.
+
+ With Qt Quick Controls, declare an ApplicationWindow as the root item of
+ your application and launch it by using QQmlApplicationEngine instead.
+ This ensures that you can control top level window properties from QML.
+
+ A basic example of a source file that makes use of controls is shown here:
+
+ \code
+ #include <QGuiApplication>
+ #include <QQmlApplicationEngine>
+
+ int main(int argc, char *argv[])
+ {
+ QGuiApplication app(argc, argv);
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+ return app.exec();
+ }
+ \endcode
+
+ \section2 Using C++ Data From QML
+
+ If you need to register a C++ class to use from QML, you can call
+ qmlRegisterType() before declaring your QQmlApplicationEngine.
+ See \l [QtQml] {Defining QML Types from C++} for more information.
+
+ If you need to expose data to QML components, you need to make them
+ available to the context of the current QML engine. See QQmlContext for
+ more information.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-guidelines.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-guidelines.qdoc
new file mode 100644
index 0000000000..f9c8246be8
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-guidelines.qdoc
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-guidelines.html
+ \keyword Qt Quick Controls Guidelines
+ \title Qt Quick Controls Guidelines
+ \keyword Qt Quick Controls 2 Guidelines
+
+ Qt Quick Controls offers a selection of controls that can be used to
+ build complete interfaces in Qt Quick.
+
+ Below you will find practical guidelines on how and when to use
+ the controls.
+
+ \annotatedlist qtquickcontrols2-guidelines
+
+ \section1 Related Information
+ \list
+ \li \l{Qt Quick Controls QML Types}{All Qt Quick Controls QML Types}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-icons.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-icons.qdoc
new file mode 100644
index 0000000000..4948461c1a
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-icons.qdoc
@@ -0,0 +1,145 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-icons.html
+ \keyword Icons in Qt Quick Controls 2
+ \title Icons in Qt Quick Controls
+
+ Qt Quick Controls comes with support for icons since Qt 5.10. This means,
+ Buttons, item delegates, and menu items are now capable of presenting an
+ icon in addition to a text label.
+
+ \section1 Using Icons
+
+ \l {AbstractButton::icon}{AbstractButton} and \l {Action::icon}{Action} provide
+ the following properties through which icons can be set:
+ \list
+ \li \c icon.name
+ \li \c icon.source
+ \li \c icon.width
+ \li \c icon.height
+ \li \c icon.color
+ \li \c icon.cache
+ \endlist
+
+ Theme icons are referenced by a name, and regular icons by a source URL. Both
+ \c icon.name and \c icon.source can be set to ensure that an icon will always
+ be found. If the icon is found in the theme, it will always be used; even if
+ \c icon.source is also set. If the icon is not found in the theme, \c icon.source
+ will be used instead.
+
+ \code
+ Button {
+ icon.name: "edit-cut"
+ icon.source: "images/cut.png"
+ }
+ \endcode
+
+ Each \l {Styling Qt Quick Controls}{Qt Quick Controls 2 style} requests a
+ default icon size and color according to their guidelines, but it is possible
+ to override these by setting the \c icon.width, \c icon.height, and \c icon.color
+ properties.
+
+ The image that is loaded by an icon whose \c width and \c height are not set
+ depends on the type of icon in use. For theme icons, the closest available size
+ will be chosen. For regular icons, the behavior is the same as the \l {Image::}
+ {sourceSize} property of \l Image.
+
+ The icon color is specified by default so that it matches the text color in
+ different states. In order to use an icon with the original colors, set the
+ color to \c "transparent".
+
+ \code
+ Button {
+ icon.color: "transparent"
+ icon.source: "images/logo.png"
+ }
+ \endcode
+
+ For buttons, the \l {AbstractButton::}{display} property can be used to control
+ how the icon and text are displayed within the button.
+
+ The \c icon.cache property controls whether or not the icon image is cached.
+ For more information, see \l {Image::}{cache}.
+
+ \section1 Icon Themes
+
+ Compliant icon themes must follow the freedesktop icon theme specification,
+ which can be obtained here: \l {http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html}.
+
+ Traditionally, only Linux and UNIX support icon themes on the platform level,
+ but it is possible to bundle a compliant icon theme in an application to use
+ themed icons on any platform.
+
+ The default \l {QIcon::themeSearchPaths()}{icon theme search paths} depend on
+ the platform. On Linux and UNIX, the search path will use the \c XDG_DATA_DIRS
+ environment variable if available. All platforms have the resource directory
+ \c :/icons as a fallback. Custom icon theme search paths can be set with
+ \l QIcon::setThemeSearchPaths().
+
+ The following example bundles an icon theme called \e mytheme into the application's
+ resources using \l {The Qt Resource System}{Qt's resource system}.
+
+ \badcode
+ <RCC>
+ <qresource prefix="/">
+ <file>icons/mytheme/index.theme</file>
+ <file>icons/mytheme/32x32/myicon.png</file>
+ <file>icons/mytheme/32x32@2/myicon.png</file>
+ </qresource>
+ </RCC>
+ \endcode
+
+ The \c index.theme file describes the general attributes of the icon theme, and
+ lists the available theme icon directories:
+
+ \badcode
+ [Icon Theme]
+ Name=mytheme
+ Comment=My Icon Theme
+
+ Directories=32x32,32x32@2
+
+ [32x32]
+ Size=32
+ Type=Fixed
+
+ [32x32@2]
+ Size=32
+ Scale=2
+ Type=Fixed
+ \endcode
+
+ In order to use the bundled icon theme, an application should call \l QIcon::setThemeName()
+ before loading the main QML file:
+
+ \code
+ #include <QGuiApplication>
+ #include <QQmlApplicationEngine>
+ #include <QIcon>
+
+ int main(int argc, char *argv[])
+ {
+ QGuiApplication app(argc, argv);
+
+ QIcon::setThemeName("mytheme"); // <--
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
+ return app.exec();
+ }
+ \endcode
+
+ Now it is possible to use named icons from the bundled icon theme without having
+ to specify any fallback source:
+
+ \code
+ Button {
+ icon.name: "myicon"
+ }
+ \endcode
+
+ The \l {Qt Quick Controls - Gallery}{Gallery example} and \l {Qt Quick Controls 2 - Wearable Demo}
+ {Wearable Demo} provide complete runnable applications with a bundled icon theme.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-imagine.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-imagine.qdoc
new file mode 100644
index 0000000000..98bb726d00
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-imagine.qdoc
@@ -0,0 +1,2511 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-imagine.html
+ \title Imagine Style
+
+ The Imagine Style is based on configurable image assets. \l{detailed-desc-imagine}{More...}
+
+ \styleimport {QtQuick.Controls.Imagine 2.12} {Qt 5.10}
+
+ \section1 Attached Properties
+
+ \list
+ \li \l {imagine-path-attached-prop}{\b path} : string
+ \endlist
+
+ \section1 Detailed Description
+ \target detailed-desc-imagine
+
+ The Imagine style is based on image assets. The style comes with a default
+ set of images, but the images can be easily changed by providing a directory
+ with images using a predefined naming convention.
+
+ \image qtquickcontrols2-imagine.png
+ \caption The Imagine style with the default images
+
+ To run an application with the Imagine style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \section2 File Names
+
+ The image files are named using the following convention:
+
+ \c <control>-<element>-<states>
+
+ The \c <control> and \c <element> sections are mandatory, but the
+ \c <states> section is optional. For example, if a single file named
+ \c "button-background.9.png" is provided for \l {Button}, it will be used
+ for every state that \c Button supports. It is up to the developer to
+ decide the set of states that they will provide images for. However, it
+ is recommended to provide images for the most common control states where
+ possible, such as \c disabled, \c pressed, etc. This will ensure that
+ interactive controls visually behave as the end user would expect them to.
+
+ \section2 Element Reference
+
+ The following table lists which elements are supported for each control,
+ along with the possible states for that element, and the file extension
+ that it expects. An element is an image that represents a certain visual
+ part of the control. For example, \c {Button}'s \c "background" element
+ represents its \l {Control::}{background}.
+
+ \table
+ \header
+ \li Control
+ \li Element
+ \li States
+ \li Extension
+ \row
+ \li \l ApplicationWindow
+ \li background
+ \li active
+ \li .9.png (or .png)
+ \row
+ \li \l BusyIndicator
+ \li animation
+ \li disabled, running, mirrored, hovered
+ \li .webp
+ \row
+ \li
+ \li background
+ \li same as above
+ \li .webp
+ \row
+ \li \l Button
+ \li background
+ \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered
+ \li .9.png
+ \row
+ \li \l CheckBox
+ \li background
+ \li disabled, pressed, checked, partially-checked, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li \l CheckDelegate
+ \li background
+ \li disabled, pressed, checked, partially-checked, focused, highlighted, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li \l ComboBox
+ \li background
+ \li disabled, pressed, editable, open, focused, mirrored, hovered, flat
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li
+ \li popup
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l DelayButton
+ \li background
+ \li disabled, pressed, checked, checkable, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li progress
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li mask
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l Dial
+ \li background
+ \li disabled, pressed, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l Dialog
+ \li background
+ \li modal, dim
+ \li .9.png (or .png)
+ \row
+ \li
+ \li title
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li .9.png (or .png)
+ \row
+ \li \l DialogButtonBox
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l Drawer
+ \li background
+ \li modal, dim, top, left, right, bottom
+ \li .9.png (or .png)
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li .9.png (or .png)
+ \row
+ \li \l Frame
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l GroupBox
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li
+ \li title
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l ItemDelegate
+ \li background
+ \li disabled, pressed, focused, highlighted, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l Label
+ \li background
+ \li disabled, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l Menu
+ \li background
+ \li modal, dim
+ \li .9.png (or .png)
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li .9.png (or .png)
+ \row
+ \li \l MenuItem
+ \li arrow
+ \li disabled, pressed, checked, focused, highlighted, mirrored, hovered
+ \li .png
+ \row
+ \li
+ \li background
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li \l MenuSeparator
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li
+ \li separator
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l Page
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l PageIndicator
+ \li background
+ \li disabled, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li delegate
+ \li disabled, pressed, current, mirrored, hovered
+ \li .png
+ \row
+ \li \l Pane
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l Popup
+ \li background
+ \li modal, dim
+ \li .9.png (or .png)
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li .9.png (or .png)
+ \row
+ \li \l ProgressBar
+ \li animation
+ \li disabled, mirrored, hovered
+ \li .png
+ \row
+ \li
+ \li background
+ \li disabled, indeterminate, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li mask
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li progress
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l RadioButton
+ \li background
+ \li disabled, pressed, checked, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li \l RadioDelegate
+ \li background
+ \li disabled, pressed, checked, focused, highlighted, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .png
+ \row
+ \li \l RangeSlider
+ \li background
+ \li vertical, horizontal, disabled, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l RangeSlider
+ \li progress
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li first, second, vertical, horizontal, disabled, pressed, focused, mirrored, hovered
+ \li .png
+ \row
+ \li \l RoundButton
+ \li background
+ \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l ScrollBar
+ \li background
+ \li vertical, horizontal, disabled, interactive, pressed, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l ScrollIndicator
+ \li background
+ \li vertical, horizontal, disabled, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l ScrollView
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l Slider
+ \li background
+ \li vertical, horizontal, disabled, pressed, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li progress
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l SpinBox
+ \li background
+ \li disabled, editable, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li editor
+ \li disabled, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li up, down, disabled, editable, pressed, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l StackView
+ \li background
+ \li disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l SwipeDelegate
+ \li background
+ \li disabled, pressed, focused, highlighted, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l SwipeView
+ \li background
+ \li vertical, horizontal, disabled, interactive, focused, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l Switch
+ \li background
+ \li disabled, pressed, checked, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l SwitchDelegate
+ \li background
+ \li disabled, pressed, checked, focused, highlighted, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li
+ \li handle
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li
+ \li indicator
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l TabBar
+ \li background
+ \li disabled, header, footer, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l TabButton
+ \li background
+ \li disabled, pressed, checked, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l TextArea
+ \li background
+ \li disabled, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l TextField
+ \li background
+ \li disabled, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l ToolBar
+ \li background
+ \li disabled, header, footer, mirrored
+ \li .9.png (or .png)
+ \row
+ \li \l ToolButton
+ \li background
+ \li disabled, pressed, checked, checkable, focused, highlighted, flat, mirrored, hovered
+ \li .9.png (or .png)
+ \row
+ \li \l ToolSeparator
+ \li background
+ \li vertical, horizontal, disabled, mirrored
+ \li .9.png (or .png)
+ \row
+ \li
+ \li separator
+ \li same as above
+ \li .9.png (or .png)
+ \row
+ \li \l ToolTip
+ \li background
+ \li
+ \li .9.png (or .png)
+ \row
+ \li \l Tumbler
+ \li background
+ \li disabled, focused, mirrored, hovered
+ \li .9.png (or .png)
+ \endtable
+
+ \section2 Asset Examples
+
+ The following table lists examples of assets (taken from the
+ \l {https://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quickcontrols/imagine/images}
+ {default Imagine style assets}) for all controls. The list is not
+ exhaustive, as not all elements need assets, but it can be used as a guide
+ when creating your own assets.
+
+ The template that these assets were \l {Exporting 9-Patch Images}
+ {exported from} is available as a
+ \l {https://code.qt.io/cgit/qt/qtdeclarative.git/plain/src/quickcontrols/imagine/design/imagine.sketch}
+ {Sketch project}.
+
+ \table
+ \header
+ \li Control
+ \li Element
+ \li States
+ \li Asset
+ \li Notes
+ \row
+ \li \l ApplicationWindow
+ \li background
+ \li
+ \li \image imagine/images/applicationwindow-background.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li
+ \li \image imagine/images/applicationwindow-overlay.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li \image imagine/images/applicationwindow-overlay-modal.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li \l Button
+ \li background
+ \li
+ \li \image imagine/images/button-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/button-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/button-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/button-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked
+ \li \image imagine/images/button-background-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, disabled
+ \li \image imagine/images/button-background-checked-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, focused
+ \li \image imagine/images/button-background-checked-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, hovered
+ \li \image imagine/images/button-background-checked-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted
+ \li \image imagine/images/button-background-highlighted.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, disabled
+ \li \image imagine/images/button-background-highlighted-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, focused
+ \li \image imagine/images/button-background-highlighted-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, hovered
+ \li \image imagine/images/button-background-highlighted-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, pressed
+ \li \image imagine/images/button-background-highlighted-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, checked
+ \li \image imagine/images/button-background-highlighted-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/button-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li flat
+ \li \image imagine/images/button-background-flat.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li flat, disabled
+ \li \image imagine/images/button-background-flat-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li flat, hovered
+ \li \image imagine/images/button-background-flat-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li flat, pressed
+ \li \image imagine/images/button-background-flat-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li flat, checked
+ \li \image imagine/images/button-background-flat-checked.9.png
+ \li
+ \row
+ \li \l CheckBox
+ \li indicator
+ \li
+ \li \image imagine/images/checkbox-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/checkbox-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/checkbox-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/checkbox-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/checkbox-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/checkbox-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/checkbox-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked
+ \li \image imagine/images/checkbox-indicator-partially-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, pressed
+ \li \image imagine/images/checkbox-indicator-partially-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, focused
+ \li \image imagine/images/checkbox-indicator-partially-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, hovered
+ \li \image imagine/images/checkbox-indicator-partially-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/checkbox-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/checkbox-indicator-hovered.png
+ \li
+ \row
+ \li \l CheckDelegate
+ \li background
+ \li
+ \li \image imagine/images/checkdelegate-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/checkdelegate-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/checkdelegate-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/checkdelegate-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/checkdelegate-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li
+ \li \image imagine/images/checkdelegate-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/checkdelegate-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/checkdelegate-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/checkdelegate-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/checkdelegate-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/checkdelegate-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/checkdelegate-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/checkdelegate-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/checkdelegate-indicator-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked
+ \li \image imagine/images/checkdelegate-indicator-partially-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, pressed
+ \li \image imagine/images/checkdelegate-indicator-partially-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, focused
+ \li \image imagine/images/checkdelegate-indicator-partially-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li partially, checked, hovered
+ \li \image imagine/images/checkdelegate-indicator-partially-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/checkdelegate-indicator-hovered.png
+ \li
+ \row
+ \li \l ComboBox
+ \li background
+ \li
+ \li \image imagine/images/combobox-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/combobox-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/combobox-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/combobox-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/combobox-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li open
+ \li \image imagine/images/combobox-background-open.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li editable
+ \li \image imagine/images/combobox-background-editable.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li editable, focused
+ \li \image imagine/images/combobox-background-editable-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li editable, disabled
+ \li \image imagine/images/combobox-background-editable-disabled.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li
+ \li \image imagine/images/combobox-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/combobox-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li editable
+ \li \image imagine/images/combobox-indicator-editable.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li editable, disabled
+ \li \image imagine/images/combobox-indicator-editable-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li editable, mirrored
+ \li \image imagine/images/combobox-indicator-editable-mirrored.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li editable, mirrored, disabled
+ \li \image imagine/images/combobox-indicator-editable-mirrored-disabled.png
+ \li
+ \row
+ \li
+ \li popup
+ \li
+ \li \image imagine/images/combobox-popup.9.png
+ \li
+ \row
+ \li \l DelayButton
+ \li background
+ \li
+ \li \image imagine/images/delaybutton-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/delaybutton-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled, checked
+ \li \image imagine/images/delaybutton-background-disabled-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/delaybutton-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/delaybutton-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked
+ \li \image imagine/images/delaybutton-background-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, focused
+ \li \image imagine/images/delaybutton-background-checked-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, hovered
+ \li \image imagine/images/delaybutton-background-checked-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/delaybutton-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li
+ \li \image imagine/images/delaybutton-progress.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li disabled
+ \li \image imagine/images/delaybutton-progress-disabled.9.png
+ \li
+ \row
+ \li
+ \li mask
+ \li
+ \li \image imagine/images/delaybutton-mask.9.png
+ \li
+ \row
+ \li \l Dial
+ \li background
+ \li
+ \li \image imagine/images/dial-background.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/dial-background-disabled.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/dial-background-focused.png
+ \li
+ \row
+ \li
+ \li handle
+ \li
+ \li \image imagine/images/dial-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/dial-handle-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused
+ \li \image imagine/images/dial-handle-focused.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, pressed
+ \li \image imagine/images/dial-handle-focused-pressed.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, hovered
+ \li \image imagine/images/dial-handle-focused-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li pressed
+ \li \image imagine/images/dial-handle-pressed.png
+ \li
+ \row
+ \li
+ \li handle
+ \li hovered
+ \li \image imagine/images/dial-handle-hovered.png
+ \li
+ \row
+ \li \l Dialog
+ \li background
+ \li
+ \li \image imagine/images/dialog-background.9.png
+ \li
+ \row
+ \li
+ \li overlay
+ \li
+ \li \image imagine/images/dialog-overlay.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li \image imagine/images/dialog-overlay-modal.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li \l DialogButtonBox
+ \li background
+ \li
+ \li \image imagine/images/dialogbuttonbox-background.9.png
+ \li
+ \row
+ \li \l Drawer
+ \li background
+ \li left
+ \li \image imagine/images/drawer-background-left.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li right
+ \li \image imagine/images/drawer-background-right.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li top
+ \li \image imagine/images/drawer-background-top.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li bottom
+ \li \image imagine/images/drawer-background-bottom.9.png
+ \li
+ \row
+ \li
+ \li overlay
+ \li
+ \li \image imagine/images/drawer-overlay.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li \image imagine/images/drawer-overlay-modal.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li \l Frame
+ \li background
+ \li
+ \li \image imagine/images/frame-background.9.png
+ \li
+ \row
+ \li \l GroupBox
+ \li background
+ \li
+ \li \image imagine/images/groupbox-background.9.png
+ \li
+ \row
+ \li
+ \li title
+ \li
+ \li \image imagine/images/groupbox-title.9.png
+ \li
+ \row
+ \li \l ItemDelegate
+ \li background
+ \li
+ \li \image imagine/images/itemdelegate-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/itemdelegate-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/itemdelegate-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/itemdelegate-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/itemdelegate-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted
+ \li \image imagine/images/itemdelegate-background-highlighted.9.png
+ \li
+ \row
+ \li \l Menu
+ \li background
+ \li
+ \li \image imagine/images/menu-background.9.png
+ \li
+ \row
+ \li \l MenuItem
+ \li background
+ \li
+ \li \image imagine/images/menuitem-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted
+ \li \image imagine/images/menuitem-background-highlighted.9.png
+ \li
+ \row
+ \li
+ \li arrow
+ \li
+ \li \image imagine/images/menuitem-arrow.png
+ \li
+ \row
+ \li
+ \li arrow
+ \li mirrored
+ \li \image imagine/images/menuitem-arrow-mirrored.png
+ \li
+ \row
+ \li
+ \li arrow
+ \li disabled
+ \li \image imagine/images/menuitem-arrow-disabled.png
+ \li
+ \row
+ \li
+ \li arrow
+ \li mirrored, disabled
+ \li \image imagine/images/menuitem-arrow-mirrored-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li
+ \li \image imagine/images/menuitem-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/menuitem-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/menuitem-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/menuitem-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/menuitem-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/menuitem-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/menuitem-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/menuitem-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/menuitem-indicator-hovered.png
+ \li
+ \row
+ \li \l MenuSeparator
+ \li separator
+ \li
+ \li \image imagine/images/menuseparator-separator.9.png
+ \li
+ \row
+ \li \l Page
+ \li background
+ \li
+ \li \image imagine/images/page-background.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li \l PageIndicator
+ \li delegate
+ \li
+ \li \image imagine/images/pageindicator-delegate.png
+ \li
+ \row
+ \li
+ \li delegate
+ \li disabled
+ \li \image imagine/images/pageindicator-delegate-disabled.png
+ \li
+ \row
+ \li
+ \li delegate
+ \li disabled, current
+ \li \image imagine/images/pageindicator-delegate-disabled-current.png
+ \li
+ \row
+ \li
+ \li delegate
+ \li pressed
+ \li \image imagine/images/pageindicator-delegate-pressed.png
+ \li
+ \row
+ \li
+ \li delegate
+ \li current
+ \li \image imagine/images/pageindicator-delegate-current.png
+ \li
+ \row
+ \li \l Pane
+ \li background
+ \li
+ \li \image imagine/images/pane-background.9.png
+ \li
+ \row
+ \li \l Popup
+ \li background
+ \li
+ \li \image imagine/images/popup-background.9.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li
+ \li \image imagine/images/popup-overlay.png
+ \li \l {sup1}{See footnote} \sup 1
+ \row
+ \li
+ \li overlay
+ \li modal
+ \li \image imagine/images/popup-overlay-modal.png
+ \li
+ \row
+ \li \l ProgressBar
+ \li background
+ \li
+ \li \image imagine/images/progressbar-background.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li
+ \li \image imagine/images/progressbar-progress.png
+ \li
+ \row
+ \li
+ \li mask
+ \li
+ \li \image imagine/images/progressbar-mask.9.png
+ \li
+ \row
+ \li \l RadioButton
+ \li indicator
+ \li
+ \li \image imagine/images/radiobutton-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/radiobutton-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/radiobutton-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/radiobutton-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/radiobutton-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/radiobutton-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/radiobutton-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/radiobutton-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/radiobutton-indicator-hovered.png
+ \li
+ \row
+ \li \l RadioDelegate
+ \li background
+ \li
+ \li \image imagine/images/radiodelegate-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/radiodelegate-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/radiodelegate-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/radiodelegate-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/radiodelegate-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li
+ \li \image imagine/images/radiodelegate-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/radiodelegate-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/radiodelegate-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/radiodelegate-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/radiodelegate-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/radiodelegate-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/radiodelegate-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/radiodelegate-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/radiodelegate-indicator-hovered.png
+ \li
+ \row
+ \li \l RangeSlider
+ \li background
+ \li vertical
+ \li \image imagine/images/rangeslider-background-vertical.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li horizontal
+ \li \image imagine/images/rangeslider-background-horizontal.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li vertical
+ \li \image imagine/images/rangeslider-progress-vertical.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li vertical, disabled
+ \li \image imagine/images/rangeslider-progress-vertical-disabled.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li horizontal
+ \li \image imagine/images/rangeslider-progress-horizontal.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li horizontal, disabled
+ \li \image imagine/images/rangeslider-progress-horizontal-disabled.9.png
+ \li
+ \row
+ \li
+ \li handle
+ \li
+ \li \image imagine/images/rangeslider-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/rangeslider-handle-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused
+ \li \image imagine/images/rangeslider-handle-focused.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, hovered
+ \li \image imagine/images/rangeslider-handle-focused-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, pressed
+ \li \image imagine/images/rangeslider-handle-focused-pressed.png
+ \li
+ \row
+ \li
+ \li handle
+ \li hovered
+ \li \image imagine/images/rangeslider-handle-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li pressed
+ \li \image imagine/images/rangeslider-handle-pressed.png
+ \li
+ \row
+ \li \l RoundButton
+ \li background
+ \li
+ \li \image imagine/images/roundbutton-background.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/roundbutton-background-disabled.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled, checked
+ \li \image imagine/images/roundbutton-background-disabled-checked.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/roundbutton-background-focused.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/roundbutton-background-pressed.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked
+ \li \image imagine/images/roundbutton-background-checked.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, focused
+ \li \image imagine/images/roundbutton-background-checked-focused.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, hovered
+ \li \image imagine/images/roundbutton-background-checked-hovered.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted
+ \li \image imagine/images/roundbutton-background-highlighted.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, pressed
+ \li \image imagine/images/roundbutton-background-highlighted-pressed.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, focused
+ \li \image imagine/images/roundbutton-background-highlighted-focused.png
+ \li
+ \row
+ \li
+ \li background
+ \li highlighted, hovered
+ \li \image imagine/images/roundbutton-background-highlighted-hovered.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/roundbutton-background-hovered.png
+ \li
+ \row
+ \li \l ScrollBar
+ \li handle
+ \li
+ \li \image imagine/images/scrollbar-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/scrollbar-handle-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li interactive
+ \li \image imagine/images/scrollbar-handle-interactive.png
+ \li
+ \row
+ \li
+ \li handle
+ \li interactive, disabled
+ \li \image imagine/images/scrollbar-handle-interactive-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li interactive, pressed
+ \li \image imagine/images/scrollbar-handle-interactive-pressed.png
+ \li
+ \row
+ \li
+ \li handle
+ \li interactive, hovered
+ \li \image imagine/images/scrollbar-handle-interactive-hovered.png
+ \li
+ \row
+ \li \l ScrollIndicator
+ \li handle
+ \li
+ \li \image imagine/images/scrollindicator-handle.png
+ \li
+ \row
+ \li \l Slider
+ \li background
+ \li vertical
+ \li \image imagine/images/slider-background-vertical.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li horizontal
+ \li \image imagine/images/slider-background-horizontal.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li vertical
+ \li \image imagine/images/slider-progress-vertical.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li vertical, disabled
+ \li \image imagine/images/slider-progress-vertical-disabled.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li horizontal
+ \li \image imagine/images/slider-progress-horizontal.9.png
+ \li
+ \row
+ \li
+ \li progress
+ \li horizontal, disabled
+ \li \image imagine/images/slider-progress-horizontal-disabled.9.png
+ \li
+ \row
+ \li
+ \li handle
+ \li
+ \li \image imagine/images/slider-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/slider-handle-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused
+ \li \image imagine/images/slider-handle-focused.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, hovered
+ \li \image imagine/images/slider-handle-focused-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li focused, pressed
+ \li \image imagine/images/slider-handle-focused-pressed.png
+ \li
+ \row
+ \li
+ \li handle
+ \li hovered
+ \li \image imagine/images/slider-handle-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li pressed
+ \li \image imagine/images/slider-handle-pressed.png
+ \li
+ \row
+ \li \l SpinBox
+ \li background
+ \li
+ \li \image imagine/images/spinbox-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/spinbox-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/spinbox-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li editable
+ \li \image imagine/images/spinbox-background-editable.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up
+ \li \image imagine/images/spinbox-indicator-up.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, disabled
+ \li \image imagine/images/spinbox-indicator-up-disabled.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, pressed
+ \li \image imagine/images/spinbox-indicator-up-pressed.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, focused
+ \li \image imagine/images/spinbox-indicator-up-focused.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, mirrored
+ \li \image imagine/images/spinbox-indicator-up-mirrored.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, hovered
+ \li \image imagine/images/spinbox-indicator-up-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, editable
+ \li \image imagine/images/spinbox-indicator-up-editable.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, editable, pressed
+ \li \image imagine/images/spinbox-indicator-up-editable-pressed.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, editable, focused
+ \li \image imagine/images/spinbox-indicator-up-editable-focused.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, editable, mirrored
+ \li \image imagine/images/spinbox-indicator-up-editable-mirrored.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li up, editable, hovered
+ \li \image imagine/images/spinbox-indicator-up-editable-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down
+ \li \image imagine/images/spinbox-indicator-down.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, disabled
+ \li \image imagine/images/spinbox-indicator-down-disabled.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, pressed
+ \li \image imagine/images/spinbox-indicator-down-pressed.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, focused
+ \li \image imagine/images/spinbox-indicator-down-focused.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, mirrored
+ \li \image imagine/images/spinbox-indicator-down-mirrored.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, hovered
+ \li \image imagine/images/spinbox-indicator-down-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, editable
+ \li \image imagine/images/spinbox-indicator-down-editable.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, editable, pressed
+ \li \image imagine/images/spinbox-indicator-down-editable-pressed.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, editable, focused
+ \li \image imagine/images/spinbox-indicator-down-editable-focused.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, editable, mirrored
+ \li \image imagine/images/spinbox-indicator-down-editable-mirrored.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li down, editable, hovered
+ \li \image imagine/images/spinbox-indicator-down-editable-hovered.9.png
+ \li
+ \row
+ \li \l SwipeDelegate
+ \li background
+ \li
+ \li \image imagine/images/swipedelegate-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/swipedelegate-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/swipedelegate-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/swipedelegate-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/swipedelegate-background-hovered.9.png
+ \li
+ \row
+ \li \l Switch
+ \li indicator
+ \li
+ \li \image imagine/images/switch-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/switch-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/switch-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/switch-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/switch-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/switch-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/switch-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/switch-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/switch-indicator-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li
+ \li \image imagine/images/switch-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/switch-handle-disabled.png
+ \li
+ \row
+ \li
+ \li handle
+ \li pressed
+ \li \image imagine/images/switch-handle-pressed.png
+ \li
+ \row
+ \li \l SwitchDelegate
+ \li background
+ \li
+ \li \image imagine/images/switchdelegate-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/switchdelegate-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/switchdelegate-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/switchdelegate-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/switchdelegate-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li
+ \li \image imagine/images/switchdelegate-indicator.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li disabled
+ \li \image imagine/images/switchdelegate-indicator-disabled.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li pressed
+ \li \image imagine/images/switchdelegate-indicator-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked
+ \li \image imagine/images/switchdelegate-indicator-checked.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, focused
+ \li \image imagine/images/switchdelegate-indicator-checked-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, hovered
+ \li \image imagine/images/switchdelegate-indicator-checked-hovered.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li checked, pressed
+ \li \image imagine/images/switchdelegate-indicator-checked-pressed.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li focused
+ \li \image imagine/images/switchdelegate-indicator-focused.png
+ \li
+ \row
+ \li
+ \li indicator
+ \li hovered
+ \li \image imagine/images/switchdelegate-indicator-hovered.png
+ \li
+ \row
+ \li
+ \li handle
+ \li
+ \li \image imagine/images/switchdelegate-handle.png
+ \li
+ \row
+ \li
+ \li handle
+ \li disabled
+ \li \image imagine/images/switchdelegate-handle-disabled.png
+ \li
+ \row
+ \li \l TabBar
+ \li background
+ \li
+ \li \image imagine/images/tabbar-background.png
+ \li
+ \row
+ \li \l TabButton
+ \li background
+ \li
+ \li \image imagine/images/tabbutton-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/tabbutton-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/tabbutton-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked
+ \li \image imagine/images/tabbutton-background-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/tabbutton-background-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled, checked
+ \li \image imagine/images/tabbutton-background-disabled-checked.9.png
+ \li
+ \row
+ \li \l TextArea
+ \li background
+ \li
+ \li \image imagine/images/textarea-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/textarea-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/textarea-background-focused.9.png
+ \li
+ \row
+ \li \l TextField
+ \li background
+ \li
+ \li \image imagine/images/textfield-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled
+ \li \image imagine/images/textfield-background-disabled.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/textfield-background-focused.9.png
+ \li
+ \row
+ \li \l ToolBar
+ \li background
+ \li
+ \li \image imagine/images/toolbar-background.png
+ \li
+ \row
+ \li \l ToolButton
+ \li background
+ \li
+ \li \image imagine/images/toolbutton-background.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li disabled, checked
+ \li \image imagine/images/toolbutton-background-disabled-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li focused
+ \li \image imagine/images/toolbutton-background-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li pressed
+ \li \image imagine/images/toolbutton-background-pressed.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked
+ \li \image imagine/images/toolbutton-background-checked.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, focused
+ \li \image imagine/images/toolbutton-background-checked-focused.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li checked, hovered
+ \li \image imagine/images/toolbutton-background-checked-hovered.9.png
+ \li
+ \row
+ \li
+ \li background
+ \li hovered
+ \li \image imagine/images/toolbutton-background-hovered.9.png
+ \li
+ \row
+ \li \l ToolSeparator
+ \li separator
+ \li horizontal
+ \li \image imagine/images/toolseparator-separator-horizontal.9.png
+ \li
+ \row
+ \li
+ \li separator
+ \li vertical
+ \li \image imagine/images/toolseparator-separator-vertical.9.png
+ \li
+ \row
+ \li \l ToolTip
+ \li background
+ \li
+ \li \image imagine/images/tooltip-background.9.png
+ \li
+ \endtable
+
+ \target sup1
+ \sup 1 A 1x1 image containing one color, stretched to fill the control.
+
+ \section2 9-Patch Images
+
+ The Imagine style uses \l
+ {https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch}{9-patch
+ images} in order to give designers control over how a particular element
+ responds to being resized. Here is an example of a 9-patch image that
+ represents a \l {Button}'s \l {Control::}{background}, alongside a
+ magnified version (to make it easier to see the 9-patch lines):
+
+ \image qtquickcontrols2-imagine-9-patch-4x.png
+
+ The content of the image is 44 pixels wide by 32 pixels high. Every 9-patch
+ image needs a one pixel thick line (collectively referred to as
+ "9-patch lines") around every side, so the actual size of the image becomes
+ 46 pixels wide by 34 pixels high. Note that the 9-patch lines must be one
+ pixel thick regardless of the target DPI of the image. For example,
+ the 9-patch lines for button-background.9.png and button-background@2x.9.png
+ must both be one pixel thick.
+
+ The 9-patch lines must be black, and the remaining areas must be transparent
+ or white:
+
+ \image qtquickcontrols2-imagine-9-patch-size.png
+
+ \section3 Stretchable Areas
+
+ The 9-patch lines on the top and left edges determine which parts of the
+ image are stretched when it is resized.
+
+ Below are examples of the 9-patch image being resized to one and a half
+ times its original size in various dimensions:
+
+ \image qtquickcontrols2-imagine-9-patch-resized-stretchable.png
+
+ Notice how the the rounded corners keep their original size, as they are
+ outside the range of the lines.
+
+ \section3 Padding Areas
+
+ The 9-patch lines on the right and bottom edges determine how much space
+ is available for the control's \l {Control::}{contentItem}, which means it
+ can also be thought of as controlling the \l {Control::}{padding}. For a
+ diagram that illustrates padding, see \l {Control Layout}.
+
+ Below are more examples of the 9-patch image being resized, but this time
+ demonstrating how the padding 9-patch lines work.
+
+ \image qtquickcontrols2-imagine-9-patch-resized-padding.png
+
+ The \c contentItem can take up as much space as it needs within the shaded
+ areas. If the padding lines are left out, the \c contentItem will take as
+ much space as it needs without exceeding the stretchable areas.
+
+ \section3 Inset Areas
+
+ In some cases it is necessary for a control to have a drop shadow, for
+ example. However, if we were to add a drop shadow to the button above, it
+ would affect its size, which presents problems for both layouting and
+ mouse/touch input boundaries.
+
+ Inset areas accounts for this by telling the control that a certain area of
+ the 9-patch image should go outside of the control:
+
+ \image qtquickcontrols2-imagine-9-patch-inset.png
+
+ In the image below, the dashed line represents the button's clickable area,
+ as well as the space that it will take up in a layout. The shadow is marked
+ by the striped area behind it:
+
+ \image qtquickcontrols2-imagine-9-patch-inset-boundaries.png
+
+ \section3 Exporting 9-Patch Images
+
+ Various vector and bitmap editors can be used to create 9-patch images
+ suitable for use with the Imagine style. The following sections briefly
+ explain the export process for each editor, and the last section explains
+ how to ensure the exported images are 9-patch-conformant.
+
+ \section4 Affinity Designer
+
+ See Affinity's \l {https://affinity.help/publisher/en-US.lproj/pages/Publishing/exportSettings.html}
+ {Export Settings} documentation.
+
+ \section4 Adobe Illustrator
+
+ See Adobe's
+ \l {https://helpx.adobe.com/in/illustrator/using/collect-assets-export-for-screens.html#panel}
+ {Asset Export panel} documentation.
+
+ \section4 Adobe Photoshop
+
+ See Adobe's
+ \l {https://helpx.adobe.com/photoshop/using/generate-assets-layers.html}
+ {Generate image assets from layers} documentation.
+
+ \section4 Inkscape
+
+ The \l {https://github.com/mitchcurtis/inkscape-9-patch-export}
+ {Inkscape 9-Patch Export Extension} can be used to export assets with
+ Inkscape.
+
+ \section4 Sketch
+
+ See Sketch's \l {https://sketchapp.com/docs/exporting/}{Exporting} documentation.
+
+ Qt Quick Controls also provides a
+ \l {http://code.qt.io/cgit/qt/qtdeclarative.git/tree/src/quickcontrols/imagine/design}
+ {plugin} for Sketch that automatically fixes the thickness of the 9-patch lines
+ after the assets are exported. To install this file, double-click on it.
+ Once Sketch has confirmed that the 9-patch export plugin has been installed,
+ the plugin will automatically process images when they are exported.
+
+ \section4 Fixing 9-Patch Lines
+
+ When exporting 9-patch images in several DPI variants (\c {@2x}, \c {@3x},
+ etc.), the 9-patch lines will typically be scaled up along with the image.
+ There are several ways to fix this, but perhaps the simplest approach is
+ to use \l {https://www.imagemagick.org/script/mogrify.php}{ImageMagick's mogrify}
+ tool. The tool has a \c -shave feature that can be used to crop the image
+ to reduce the thickness of the 9-patch lines:
+
+ \badcode
+ mogrify -shave 1x1 -path path/to/images *@2x.9.png
+ mogrify -shave 2x2 -path path/to/images *@3x.9.png
+ mogrify -shave 3x3 -path path/to/images *@4x.9.png
+ \endcode
+
+ Regular DPI images (those without the \c @Nx prefix) are not affected, so it
+ is only necessary to run the command on images intended for high DPI displays.
+
+ \section2 Animated Images
+
+ The \l {https://developers.google.com/speed/webp/}{WebP} and GIF animated
+ image formats are supported by the Imagine style.
+
+ \section2 Customization
+
+ \section3 Path
+
+ The Imagine style allows customizing the \l {imagine-path-attached-prop}{path}
+ that is used to do the image asset selection. The path can be specified for any
+ window or item, and it automatically propagates to children in the same manner as
+ \l {Control::font}{fonts}. In the following example, the window and all three radio
+ buttons appear with dark image assets (files that are located in "qrc:/themes/dark").
+
+ \table
+ \row
+ \li
+ \qml
+ import QtQuick 2.12
+ import QtQuick.Controls 2.12
+ import QtQuick.Controls.Imagine 2.12
+
+ ApplicationWindow {
+ visible: true
+
+ Imagine.path: "qrc:/themes/dark"
+
+ Column {
+ anchors.centerIn: parent
+
+ RadioButton { text: qsTr("Small") }
+ RadioButton { text: qsTr("Medium"); checked: true }
+ RadioButton { text: qsTr("Large") }
+ }
+ }
+ \endqml
+ \li
+ \image qtquickcontrols2-imagine-customization-dark.png
+ \endtable
+
+ In addition to specifying the path in QML, it is also possible to specify
+ it via an \l {imagine-customization-environment-variable}{environment variable}
+ or in a \l {imagine-customization-configuration-file}{configuration file}.
+ Attributes specified in QML take precedence over all other methods.
+
+ \section4 Configuration File
+ \target imagine-customization-configuration-file
+
+ \include qquickimaginestyle.qdocinc conf
+
+ See \l {Qt Quick Controls Configuration File} for more details about the
+ configuration file.
+
+ \section4 Environment Variables
+ \target imagine-customization-environment-variable
+
+ \include qquickimaginestyle.qdocinc env
+
+ See \l {Supported Environment Variables in Qt Quick Controls} for the full
+ list of supported environment variables.
+
+ \section3 Palette
+
+ The Imagine style supports palette customization via the \l {Item::}{palette}
+ property and the \l {Palette Configuration}{qtquickcontrols2.conf} file.
+ As with other styles, the exact \l[QML]{Palette}{palette roles}
+ that the Imagine style uses are style-dependent. However, as most of the visual
+ appearance of controls (for example: backgrounds) are managed through image assets,
+ only the roles that are typically used for text will have an effect.
+
+ \section3 Font
+
+ Custom fonts can be set via the \l {Control::}{font} property and the
+ \l {Font Configuration}{configuration} file.
+
+ \section2 Dependency
+
+ The Imagine style must be separately imported to gain access to the
+ attributes that are specific to the Imagine style. It should be noted
+ that regardless of the references to the Imagine style, the same
+ application code runs with any other style. Imagine-specific attributes
+ only have an effect when the application is run with the Imagine style.
+
+ If the Imagine style is imported in a QML file that is always loaded, the
+ Imagine style must be deployed with the application in order to be able
+ to run the application regardless of which style the application is run with.
+ By using \l {Using File Selectors with Qt Quick Controls}{file selectors},
+ style-specific tweaks can be applied without creating a hard dependency to
+ a style.
+
+ \b {See also} \l {Styling Qt Quick Controls}
+
+ \section1 Attached Property Documentation
+
+ \styleproperty {Imagine.path} {string} {imagine-path-attached-prop}
+ \target imagine-path-attached-prop
+ This attached property holds the path to the image assets...
+
+ \code
+ Button {
+ Imagine.path: "qrc:/themes/dark"
+ }
+ \endcode
+
+ \endstyleproperty
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example}
+ \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-index.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-index.qdoc
new file mode 100644
index 0000000000..ea148e8568
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-index.qdoc
@@ -0,0 +1,173 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols-index.html
+ \keyword Qt Quick Controls 2
+ \title Qt Quick Controls
+
+ \brief Provides a set of UI controls for Qt Quick.
+
+ Qt Quick Controls provides a set of controls that can be used
+ to build complete interfaces in Qt Quick. The module was introduced
+ in Qt 5.7.
+
+ \image qtquickcontrols2-styles.png
+
+ Qt Quick Controls comes with a selection of customizable styles.
+ See \l {Styling Qt Quick Controls} for more details.
+
+
+ \section1 Using the Module
+
+ \section2 QML API
+
+ \include {module-use.qdocinc} {using the qml api} {QtQuick.Controls}
+
+ \section2 C++ API
+
+ \include {module-use.qdocinc} {using the c++ api}
+
+ \section3 Building with CMake
+
+ \include {module-use.qdocinc} {building with cmake} {QuickControls2}
+
+ \section3 Building with qmake
+
+ \include {module-use.qdocinc} {building_with_qmake} {quickcontrols2}
+
+ \section2 Building From Source
+
+ The \b{Qt Image Formats} module is recommended, but not
+ required. It provides support for the \c {.webp} format used by the
+ \l {Animated Images}{Imagine style}.
+
+ \section1 Versions
+
+ Qt Quick Controls 2.0 was introduced in Qt 5.7. Subsequent minor Qt releases
+ increment the import version of the Qt Quick Controls modules by one,
+ until Qt 5.12, where the import versions match Qt's minor version.
+
+ In Qt 6, both the major and minor versions match, and version numbers may
+ be omitted from imports in QML. If the version is omitted, the latest
+ version will be used.
+
+ The experimental Qt Labs modules use import version 1.0.
+
+ \table
+ \header
+ \li \c Qt
+ \li \l {Qt Quick QML Types}{\c QtQuick}
+ \li \l {Qt Quick Controls QML Types}{\c QtQuick.Controls},\br
+ \l {Material Style}{\c QtQuick.Controls.Material},\br
+ \l {Universal Style}{\c QtQuick.Controls.Universal},\br
+ \l {Qt Quick Templates 2 QML Types}{\c QtQuick.Templates}
+ \li \l {Qt Labs Platform QML Types}{\c Qt.labs.platform}
+ \row
+ \li 5.7
+ \li 2.7
+ \li 2.0
+ \li 1.0
+ \row
+ \li 5.8
+ \li 2.8
+ \li 2.1
+ \li 1.0
+ \row
+ \li 5.9
+ \li 2.9
+ \li 2.2
+ \li 1.0
+ \row
+ \li 5.10
+ \li 2.10
+ \li 2.3
+ \li 1.0
+ \row
+ \li 5.11
+ \li 2.11
+ \li 2.4
+ \li 1.0
+ \row
+ \li 5.12
+ \li 2.12
+ \li 2.12
+ \li 1.0
+ \row
+ \li 6.0
+ \li 6.0
+ \li 6.0
+ \li 1.0
+ \row
+ \li ...
+ \li ...
+ \li ...
+ \li ...
+ \endtable
+
+ \section1 Module Evolution
+
+ Qt Quick Controls was originally written with touch interfaces as the
+ primary focus.
+ While it is already possible to develop desktop interfaces, work is ongoing
+ to provide a more native look and feel.
+
+ \l{Changes to Qt Quick Controls} lists important changes in the
+ module API and functionality that were done for the Qt 6 series of Qt.
+
+ \section1 Articles and Guides
+
+ \list
+ \li \l{Getting Started with Qt Quick Controls}{Getting Started}
+ \li \l{Qt Quick Controls Guidelines}{Guidelines}
+ \li \l{Styling Qt Quick Controls}{Styling}
+ \li \l{Icons in Qt Quick Controls}{Icons}
+ \li \l{Customizing Qt Quick Controls}{Customization}
+ \li \l{Using File Selectors with Qt Quick Controls}{Using File Selectors}
+ \li \l{Deploying Qt Quick Controls Applications}{Deployment}
+ \li \l{Qt Quick Controls Configuration File}{Configuration File}
+ \li \l{Supported Environment Variables in Qt Quick Controls}
+ {Environment Variables}
+ \endlist
+
+ \section1 Examples
+
+ \list
+ \li \l{Qt Quick Controls - Gallery}{Gallery}
+ \li \l{Qt Quick Controls - Chat Tutorial}{Chat Tutorial}
+ \li \l{Qt Quick Controls - Text Editor}{Text Editor}
+ \li \l{Qt Quick Controls - Wearable Demo}{Wearable Demo}
+ \li \l{Qt Quick Controls - Imagine Style Example: Automotive}{Automotive Example}
+ \li \l{Qt Quick Controls - Imagine Style Example: Music Player}{Music Player Example}
+ \li \l{Qt Quick Controls Examples}{All Examples}
+ \endlist
+
+ \section1 Reference
+
+ \list
+ \li \l{Qt Quick Controls QML Types}{QML Types}
+ \li \l{Qt Quick Controls C++ Classes}{C++ Classes}
+ \endlist
+
+ \section1 Related Modules
+
+ \list
+ \li \l{Qt Quick}
+ \li \l{Qt Quick Layouts}
+ \li \l{Qt Quick Templates 2}
+ \li \l{Qt Labs Platform}
+ \endlist
+
+ \section1 License and Attributions
+
+ Qt Quick Controls is available under commercial licenses from \l{The Qt Company}.
+ In addition, it is available under the
+ \l{GNU Lesser General Public License, version 3}, or
+ the \l{GNU General Public License, version 2}.
+ See \l{Qt Licensing} for further details.
+
+ Furthermore, Qt Quick Controls potentially contains third party
+ modules under the following permissive licenses:
+
+ \generatelist{groupsbymodule attributions-qtquickcontrols}
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-indicators.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-indicators.qdoc
new file mode 100644
index 0000000000..1526ec1b80
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-indicators.qdoc
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-indicators.html
+ \title Indicator Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for indicator controls
+
+ Qt Quick Controls offers a selection of indicator-like controls.
+
+ \annotatedlist qtquickcontrols2-indicators
+
+ Each type of indicator has its own specific target use case. The following
+ sections offer guidelines for choosing the appropriate type of indicator,
+ depending on the use case.
+
+ \section1 BusyIndicator Control
+
+ \image qtquickcontrols2-busyindicator.png
+
+ BusyIndicator can be used to show that an operation is in progress,
+ and that the UI has to wait for the operation to complete.
+
+ \section1 PageIndicator Control
+
+ \image qtquickcontrols2-pageindicator.png
+
+ \l PageIndicator is used to indicate the currently active page in
+ a container of multiple pages.
+
+ \section1 ProgressBar Control
+
+ \image qtquickcontrols2-progressbar.gif
+
+ \l ProgressBar indicates the progress of an operation. The value should be
+ updated regularly.
+
+ \section1 ScrollBar Control
+
+ \image qtquickcontrols2-scrollbar.gif
+
+ \l ScrollBar is an interactive bar that indicates the current scroll
+ position, and can be used to scroll to a specific position in a
+ \l Flickable.
+
+ \section1 ScrollIndicator Control
+
+ \image qtquickcontrols2-scrollindicator.gif
+
+ \l ScrollIndicator is a non-interactive indicator that indicates the
+ current scroll position, and can be used to scroll to a specific position in a
+ \l {Flickable}.
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-input.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-input.qdoc
new file mode 100644
index 0000000000..580438e8ac
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-input.qdoc
@@ -0,0 +1,99 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-input.html
+ \title Input Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for input controls
+
+ Qt Quick Controls offers a variety of input controls for both numeric
+ and textual input.
+
+ \annotatedlist qtquickcontrols2-input
+
+ Each type of input control has its own specific target use case. The
+ following sections offer guidelines for choosing the appropriate type
+ of input control, depending on the use case.
+
+ \section1 ComboBox Control
+
+ \image qtquickcontrols2-combobox.gif
+
+ \l ComboBox is used to select a value from a static multiple-line drop-down list.
+ It is not possible to add new values, and only one option can be selected.
+
+ Recommendations:
+ \list
+ \li If the number of values is very large, consider applying a filter.
+ \li If the list is very limited, consider using RadioButton. This has the
+ advantage that the user can see all options at the same time.
+ \li Select a default value, the value that will be chosen most often.
+ \endlist
+
+ \b {See also} \l {CheckBox Control}, \l {Tumbler Control}.
+
+ \section1 Dial Control
+
+ \image qtquickcontrols2-dial.png
+
+ \l Dial is similar to a traditional dial knob that is found on devices such
+ as stereos or industrial equipment.
+
+ The dial is rotated by clicking and dragging, with the handle indicating the
+ value of the dial.
+
+ For applications where fast input is important, the circular
+ \l {Dial::inputMode}{input mode} is useful, as clicking on the dial will
+ move it directly to that position.
+
+ For applications where precise input is important, the horizontal and
+ vertical input modes are recommended, as these allow small adjustments to
+ be made relative to where the dial is clicked. These modes are also better
+ for dials where large jumps in values could be unsafe, such as a dial that
+ controls audio volume.
+
+ \b {See also} \l {Tumbler Control}.
+
+ \section1 TextArea Control
+
+ \image qtquickcontrols2-textarea.png
+
+ \l TextArea is a multi-line text editor.
+
+ \section1 TextField Control
+
+ \image qtquickcontrols2-textfield.png
+
+ \l TextField is a single line text editor.
+
+ \b {See also} \l {Tumbler Control}.
+
+ \section1 Slider Control
+
+ \image qtquickcontrols2-slider.gif
+
+ \l Slider is used to select a value by sliding a handle along a track.
+
+ \section1 RangeSlider Control
+
+ \image qtquickcontrols2-rangeslider.gif
+
+ \l RangeSlider is used to select a range specified by two values,
+ by sliding each handle along a track.
+
+ \b {See also} \l {Slider Control}.
+
+ \section1 Tumbler Control
+
+ \image qtquickcontrols2-tumbler.png
+
+ \l Tumbler is a spinnable wheel of items that can be selected.
+
+ \b {See also} \l {ComboBox Control}.
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-ios.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-ios.qdoc
new file mode 100644
index 0000000000..3ac7d51710
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-ios.qdoc
@@ -0,0 +1,62 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-ios.html
+ \title iOS Style
+
+ The iOS Style is a native-looking style for iOS based on image assets.
+ \l{detailed-desc-iOS}{More...}
+
+ \styleimport {QtQuick.Controls.iOS} {Qt 6.4}
+
+ \section1 Attached Properties
+
+ \list
+ \li \l {ios-theme-attached-prop}{\b theme} : enumeration
+ \endlist
+
+ \section1 Detailed Description
+ \target detailed-desc-iOS
+
+ The iOS style is designed to look and feel as similar as possible to the native controls in UIKit.
+ Most of the controls make use of \l
+ {https://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch}{9-patch
+ images} to draw their components, in order to accommodate controls of varying sizes.
+ For controls that do not have a native counterpart in UIKit, the iOS style
+ provides a custom look based on colors and styles following \l
+ {https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/color/}
+ {iOS' Human Interface Guidelines }.
+ The iOS style is not a native iOS style, and as such, can run on platforms other than iOS.
+ However, for the time being, it is made available only for applications running on macOS
+ and iOS and should look the same on both platforms, besides minor differences that may occur
+ due to differences in available system fonts and font rendering engines.
+
+ \table
+ \row
+ \li \image qtquickcontrols2-ios-light.png
+ \caption The iOS style in light theme
+ \li \image qtquickcontrols2-ios-dark.png
+ \caption The iOS style in dark theme
+ \endtable
+
+ To run an application with the iOS style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \section2 Current state
+
+ The iOS style is currently in Tech Preview and is under development. Some controls are not
+ yet supported. Those controls are: \l BusyIndicator, \l DelayButton, \l Dialog, \l DialogButtonBox,
+ \l SelectionRectangle and \l Tumbler. Those will fall back to use the \l {Basic Style}.
+
+ \section2 Customization
+
+ \section3 Palette
+
+ The iOS style supports palette customization via the \l {Item::}{palette}
+ property and the \l {Palette Configuration}{qtquickcontrols2.conf} file.
+ As with other styles, the exact \l[QML]{Palette}{palette roles}
+ that the iOS style uses are style-dependent. However, as most of the visual
+ appearance of controls (for example: backgrounds) is managed through image assets,
+ only the roles that are typically used for text will have an effect.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-macos.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-macos.qdoc
new file mode 100644
index 0000000000..911baf6c20
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-macos.qdoc
@@ -0,0 +1,49 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-macos.html
+ \title macOS Style
+
+ The macOS style is a style that looks native on macOS.
+ \l {detailed-desc-macOS}{More...}
+
+ \styleimport {QtQuick.Controls.macOS} {Qt 6.0}
+
+ \target detailed-desc-macOS
+
+ The macOS style is a style that looks native on macOS. The controls are drawn run-time using
+ native frameworks, and is therefore only available for applications running on macOS.
+
+ \note Be aware that the apperance of this style can change from one minor Qt version to the
+ next, to better blend in with native applications on the platform.
+
+ \table
+ \row
+ \li \image qtquickcontrols2-macos-light.png
+ \caption The macOS style in light theme
+ \li \image qtquickcontrols2-macos-dark.png
+ \caption The macOS style in dark theme
+ \endtable
+
+ To run an application with the macOS style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \section2 Current state
+
+ The macOS style is under development, and some controls are not yet supported. Those
+ controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and
+ \l Tumbler. Those will fall back to use the \l {Fusion Style}.
+
+ \section2 Customization
+
+ The goal of the macOS style is to for the controls look and feel as similar as possible to the
+ native controls in UIKit. The style will follow the theme and colors configured globally from
+ System Preferences, and does not come with a separate customization API on top of that.
+
+ \note The macOS style is not suitable for \l {Customizing Qt Quick Controls}{customizing}.
+ The main reason is that it sometimes draw both the contents and the background
+ onto a single background item, which will not look good together with a custom contentItem.
+ It also tends to use padding and inset values that are different from the other styles.
+ \include customizing-native-styles.qdocinc
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-material.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-material.qdoc
new file mode 100644
index 0000000000..8b9c74eabb
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-material.qdoc
@@ -0,0 +1,380 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-material.html
+ \title Material Style
+
+ The Material Style is based on the Google Material Design Guidelines.
+ \l{detailed-desc-material}{More...}
+
+ \styleimport {QtQuick.Controls.Material 2.12} {Qt 5.7}
+
+ \section1 Attached Properties
+
+ \list
+ \li \l {material-accent-attached-prop}{\b accent} : color
+ \li \l {material-background-attached-prop}{\b background} : color
+ \li \l {material-elevation-attached-prop}{\b elevation} : int
+ \li \l {material-foreground-attached-prop}{\b foreground} : color
+ \li \l {material-primary-attached-prop}{\b primary} : color
+ \li \l {material-theme-attached-prop}{\b theme} : enumeration
+ \endlist
+
+ \section1 Attached Methods
+
+ \list
+ \li color \l {material-color-attached-method}{\b color}(enumeration predefined, enumeration shade)
+ \endlist
+
+ \section1 Detailed Description
+ \target detailed-desc-material
+
+ The Material style is based on the \l {https://www.google.com/design/spec/material-design/introduction.html}
+ {Google Material Design Guidelines}. It allows for a unified experience
+ across platforms and device sizes.
+
+ \table
+ \row
+ \li \image qtquickcontrols2-material-light.png
+ \caption The Material style in light theme
+ \li \image qtquickcontrols2-material-dark.png
+ \caption The Material style in dark theme
+ \endtable
+
+ To run an application with the Material style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \note The Material style is not a native Android style. The Material
+ style is a 100% cross-platform Qt Quick Controls style implementation that
+ follows the Google Material Design Guidelines. The style runs on any
+ platform, and looks more or less identical everywhere. Minor differences
+ may occur due to differences in available system fonts and font rendering
+ engines.
+
+ \section2 Customization
+
+ The Material style allows customizing five attributes, \l {material-theme-attached-prop}{theme},
+ \l {material-primary-attached-prop}{primary}, \l {material-accent-attached-prop}{accent},
+ \l {material-foreground-attached-prop}{foreground}, and \l {material-background-attached-prop}{background}.
+
+ \image qtquickcontrols2-material-attributes.png
+
+ All attributes can be specified for any window or item, and they automatically
+ propagate to children in the same manner as \l {Control::font}{fonts}. In the
+ following example, the window and all three radio buttons appear in the dark
+ theme using a purple accent color:
+
+ \table
+ \row
+ \li
+ \qml
+ import QtQuick 2.12
+ import QtQuick.Controls 2.12
+ import QtQuick.Controls.Material 2.12
+
+ ApplicationWindow {
+ visible: true
+
+ Material.theme: Material.Dark
+ Material.accent: Material.Purple
+
+ Column {
+ anchors.centerIn: parent
+
+ RadioButton { text: qsTr("Small") }
+ RadioButton { text: qsTr("Medium"); checked: true }
+ RadioButton { text: qsTr("Large") }
+ }
+ }
+ \endqml
+ \li
+ \image qtquickcontrols2-material-purple.png
+ \endtable
+
+ In addition to specifying the attributes in QML, it is also possible to
+ specify them via environment variables or in a configuration file. Attributes
+ specified in QML take precedence over all other methods.
+
+ \section3 Configuration File
+
+ \include qquickmaterialstyle.qdocinc conf
+
+ See \l {Qt Quick Controls Configuration File} for more details about the
+ configuration file.
+
+ \section3 Environment Variables
+
+ \include qquickmaterialstyle.qdocinc env
+
+ See \l {Supported Environment Variables in Qt Quick Controls} for the full
+ list of supported environment variables.
+
+ \section2 Dependency
+
+ The Material style must be separately imported to gain access to the
+ attributes that are specific to the Material style. It should be noted
+ that regardless of the references to the Material style, the same
+ application code runs with any other style. Material-specific attributes
+ only have an effect when the application is run with the Material style.
+
+ If the Material style is imported in a QML file that is always loaded, the
+ Material style must be deployed with the application in order to be able
+ to run the application regardless of which style the application is run with.
+ By using \l {Using File Selectors with Qt Quick Controls}{file selectors},
+ style-specific tweaks can be applied without creating a hard dependency to
+ a style.
+
+ \section2 Pre-defined Material Colors
+
+ Even though primary and accent can be any \l {colorvaluetypedocs}{color}, it
+ is recommended to use one of the pre-defined colors that have been designed
+ to work well with the rest of the Material style palette:
+
+ Available pre-defined colors:
+ \value Material.Red \stylecolor {#F44336} {}
+ \value Material.Pink \stylecolor {#E91E63} {(default accent)}
+ \value Material.Purple \stylecolor {#9C27B0} {}
+ \value Material.DeepPurple \stylecolor {#673AB7} {}
+ \value Material.Indigo \stylecolor {#3F51B5} {(default primary)}
+ \value Material.Blue \stylecolor {#2196F3} {}
+ \value Material.LightBlue \stylecolor {#03A9F4} {}
+ \value Material.Cyan \stylecolor {#00BCD4} {}
+ \value Material.Teal \stylecolor {#009688} {}
+ \value Material.Green \stylecolor {#4CAF50} {}
+ \value Material.LightGreen \stylecolor {#8BC34A} {}
+ \value Material.Lime \stylecolor {#CDDC39} {}
+ \value Material.Yellow \stylecolor {#FFEB3B} {}
+ \value Material.Amber \stylecolor {#FFC107} {}
+ \value Material.Orange \stylecolor {#FF9800} {}
+ \value Material.DeepOrange \stylecolor {#FF5722} {}
+ \value Material.Brown \stylecolor {#795548} {}
+ \value Material.Grey \stylecolor {#9E9E9E} {}
+ \value Material.BlueGrey \stylecolor {#607D8B} {}
+
+ When the dark theme is in use, different \l {Pre-defined Shades}{shades} of
+ the pre-defined colors are used by default:
+
+ \value Material.Red \stylecolor {#EF9A9A} {}
+ \value Material.Pink \stylecolor {#F48FB1} {(default accent)}
+ \value Material.Purple \stylecolor {#CE93D8} {}
+ \value Material.DeepPurple \stylecolor {#B39DDB} {}
+ \value Material.Indigo \stylecolor {#9FA8DA} {(default primary)}
+ \value Material.Blue \stylecolor {#90CAF9} {}
+ \value Material.LightBlue \stylecolor {#81D4FA} {}
+ \value Material.Cyan \stylecolor {#80DEEA} {}
+ \value Material.Teal \stylecolor {#80CBC4} {}
+ \value Material.Green \stylecolor {#A5D6A7} {}
+ \value Material.LightGreen \stylecolor {#C5E1A5} {}
+ \value Material.Lime \stylecolor {#E6EE9C} {}
+ \value Material.Yellow \stylecolor {#FFF59D} {}
+ \value Material.Amber \stylecolor {#FFE082} {}
+ \value Material.Orange \stylecolor {#FFCC80} {}
+ \value Material.DeepOrange \stylecolor {#FFAB91} {}
+ \value Material.Brown \stylecolor {#BCAAA4} {}
+ \value Material.Grey \stylecolor {#EEEEEE} {}
+ \value Material.BlueGrey \stylecolor {#B0BEC5} {}
+
+ \section2 Pre-defined Shades
+
+ There are several different
+ \l {https://material.google.com/style/color.html#color-color-palette}{shades}
+ of each \l {Pre-defined Material Colors}{pre-defined color} that can be passed
+ to the \l {material-color-attached-method}{Material.color()} function:
+ \value Material.Shade50
+ \value Material.Shade100
+ \value Material.Shade200
+ \value Material.Shade300
+ \value Material.Shade400
+ \value Material.Shade500
+ \value Material.Shade600
+ \value Material.Shade700
+ \value Material.Shade800
+ \value Material.Shade900
+ \value Material.ShadeA100
+ \value Material.ShadeA200
+ \value Material.ShadeA400
+ \value Material.ShadeA700
+
+ \b {See also} \l {Basic Style}, \l {Universal Style}
+
+ \section2 Variants
+
+ The Material style also supports a dense variant, where controls like
+ buttons and delegates are smaller in height and use smaller font sizes.
+ It is recommended to use the dense variant on desktop platforms, where
+ a mouse and keyboard allow more precise and flexible user interaction.
+
+ To use the dense variant, either set the
+ \c QT_QUICK_CONTROLS_MATERIAL_VARIANT environment variable to \c Dense,
+ or specify \c Variant=Dense in the
+ \l {Qt Quick Controls Configuration File}{qtquickcontrols2.conf} file.
+ The default value in both cases is \c Normal.
+
+ The following images illustrate the differences between some of the
+ controls when using the normal and dense variants:
+
+ \table
+ \row
+ \li
+ \image qtquickcontrols2-material-variant-normal.png
+ \li
+ \image qtquickcontrols2-material-variant-dense.png
+ \endtable
+
+ Note that the heights shown above may vary based on differences in fonts
+ across platforms.
+
+ \section1 Attached Property Documentation
+
+ \styleproperty {Material.accent} {color} {material-accent-attached-prop}
+ \target material-accent-attached-prop
+ This attached property holds the accent color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is \c Material.Pink.
+
+ In the following example, the accent color of the highlighted button is
+ changed to \c Material.Orange:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-material-accent.qml 1
+ \li
+ \image qtquickcontrols2-material-accent.png
+ \endtable
+
+ \note Even though the accent can be any \l {colorvaluetypedocs}{color}, it is
+ recommended to use one of the \l {pre-defined Material colors} that have been
+ designed to work well with the rest of the Material style palette.
+
+ \endstyleproperty
+
+ \styleproperty {Material.background} {color} {material-background-attached-prop}
+ \target material-background-attached-prop
+ This attached property holds the background color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is theme-specific (light or dark).
+
+ In the following example, the background color of the button is changed to
+ \c Material.Teal:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-material-background.qml 1
+ \li
+ \image qtquickcontrols2-material-background.png
+ \endtable
+
+ \endstyleproperty
+
+ \styleproperty {Material.elevation} {int} {material-elevation-attached-prop}
+ \target material-elevation-attached-prop
+ This attached property holds the elevation of the control. The higher the
+ elevation, the deeper the shadow. The property can be attached to any control,
+ but not all controls visualize elevation.
+
+ The default value is control-specific.
+
+ In the following example, the elevation of the pane is set to \c 6
+ in order to achieve the look of an
+ \l {https://material.google.com/components/cards.html}{elevated card}:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-material-elevation.qml 1
+ \li
+ \image qtquickcontrols2-material-elevation.png
+ \endtable
+
+ \endstyleproperty
+
+ \styleproperty {Material.foreground} {color} {material-foreground-attached-prop}
+ \target material-foreground-attached-prop
+ This attached property holds the foreground color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is theme-specific (light or dark).
+
+ In the following example, the foreground color of the button is set to \c
+ Material.Pink:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-material-foreground.qml 1
+ \li
+ \image qtquickcontrols2-material-foreground.png
+ \endtable
+
+ \endstyleproperty
+
+ \styleproperty {Material.primary} {color} {material-primary-attached-prop}
+ \target material-primary-attached-prop
+ This attached property holds the primary color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The primary color is used as the background color of ToolBar by default.
+
+ The default value is \c Material.Indigo.
+
+ \note Even though the primary can be any \l {colorvaluetypedocs}{color}, it is
+ recommended to use one of the \l {pre-defined Material colors} that have been
+ designed to work well with the rest of the Material style palette.
+
+ \endstyleproperty
+
+ \styleproperty {Material.theme} {enumeration} {material-theme-attached-prop}
+ \target material-theme-attached-prop
+ This attached property holds whether the theme is light or dark. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ Available themes:
+ \value Material.Light Light theme (default)
+ \value Material.Dark Dark theme
+ \value Material.System System theme
+
+ Setting the theme to \c System chooses either the light or dark theme based
+ on the system theme colors. However, when reading the value of the theme
+ property, the value is never \c System, but the actual theme.
+
+ In the following example, the theme for both the pane and the button is set
+ to \c Material.Dark:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-material-theme.qml 1
+ \li
+ \image qtquickcontrols2-material-theme.png
+ \endtable
+
+ \endstyleproperty
+
+ \section1 Attached Method Documentation
+
+ \stylemethod2 {color} {color} {enumeration} {predefined} {enumeration} {shade} {material-color-attached-method}
+ \target material-color-attached-method
+ This attached method returns the effective color value of the specified
+ \l {pre-defined Material colors}{pre-defined Material color} combined with
+ the given \l {pre-defined shades}{shade}. If omitted, the shade argument
+ defaults to \c Material.Shade500.
+
+ \qml
+ Rectangle {
+ color: Material.color(Material.Red)
+ }
+ \endqml
+
+ \endstylemethod2
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-menus.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-menus.qdoc
new file mode 100644
index 0000000000..7d54b4f027
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-menus.qdoc
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-menus.html
+ \title Menu Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for menu controls
+
+ \annotatedlist qtquickcontrols2-menus
+
+ Each type of menu control has its own specific target use case. The
+ following sections offer guidelines for choosing the appropriate type
+ of menu control, depending on the use case.
+
+ \section1 Menu Control
+
+ \image qtquickcontrols2-menu.png
+
+ \l Menu control can be used for context menus; for example, after
+ right-clicking. It can also be used for popup menus; for example, a
+ menu that is shown after clicking a button.
+
+ \l MenuItem is an item in the Menu control. Each item in a menu:
+ \list
+ \li displays text to the user
+ \li allows checking/unchecking
+ \li is highlighted (for example, on keyboard navigation)
+ \li performs some action on activation
+ \endlist
+
+ \section1 MenuBar Control
+
+ \image qtquickcontrols2-menubar.png
+
+ \l MenuBar control can be used for window menu bars.
+
+ \l MenuBarItem is an item in the MenuBar control. Each item in a menu bar:
+ \list
+ \li displays text to the user
+ \li is highlighted (for example, on keyboard navigation)
+ \li pops up the respective menu on activation
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-navigation.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-navigation.qdoc
new file mode 100644
index 0000000000..2013fc8dfd
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-navigation.qdoc
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-navigation.html
+ \title Navigation Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for navigation controls
+
+ Qt Quick Controls offers a selection of navigation models.
+
+ \annotatedlist qtquickcontrols2-navigation
+
+ The following sections offer guidelines for choosing the appropriate type
+ of navigation model, depending on the use case.
+
+ \section1 StackView Control
+
+ \image qtquickcontrols2-stackview-wireframe.png
+
+ \l StackView provides a stack-based navigation model which can be used
+ with a set of interlinked pages. StackView works according to a last-in
+ first-out principle: the page pushed last on the stack is the one visible.
+ Popping a page removes the last page and makes the previous one visible.
+
+ \section1 SwipeView Control
+
+ \image qtquickcontrols2-swipeview-wireframe.png
+
+ \l SwipeView provides a navigation model that simplifies horizontal paged
+ scrolling. The page indicator on the bottom shows which is the presently
+ active page.
+
+ \section1 TabBar Control
+
+ \image qtquickcontrols2-tabbar-wireframe.png
+
+ \l TabBar is a bar with icons or text that allows the user to switch
+ between different subtasks, views, or modes.
+
+ \section1 TabButton Control
+
+ \image qtquickcontrols2-tabbutton.png
+
+ \l TabButton is a button with a layout suitable for a TabBar control.
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-popups.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-popups.qdoc
new file mode 100644
index 0000000000..388443e24f
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-popups.qdoc
@@ -0,0 +1,75 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-popups.html
+ \title Popup Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for popup controls
+
+ \annotatedlist qtquickcontrols2-popups
+
+ Each type of popup control has its own specific target use case. The
+ following sections offer guidelines for choosing the appropriate type
+ of popup control, depending on the use case.
+
+ \section1 Drawer Control
+
+ \image qtquickcontrols2-drawer-expanded-wireframe.png
+
+ \l Drawer provides a swipe-based side panel, similar to those often used
+ in touch interfaces to provide a central location for navigation.
+
+ The drawer can be positioned at any of the four edges of the screen. It allows
+ the user to add navigation without taking up valuable screen space. The user can
+ show and hide the drawer at any time with a simple swipe movement.
+
+ \section1 Menu Control
+
+ \image qtquickcontrols2-menu.png
+
+ The \l Menu control displays a vertical list of items that can be selected. It can
+ be used for offering a list of actions that can be taken in a given context.
+
+ \b {See also} \l {Drawer Control}.
+
+ \section1 Popup Control
+
+ \image qtquickcontrols2-popup-settings.png
+
+ A \l Popup displays content over other application content.
+ It prompts the user to make a decision or enter information.
+
+ Popups can be modal or non-modal. A modal popup blocks users from interacting
+ with the application until they have made a choice and closed the popup.
+
+ A popup can be used for:
+
+ \list
+ \li communicating a message to the user that they must read and acknowledge.
+ \li displaying an error message.
+ \li prompting the user to make a choice and/or enter a value.
+ \endlist
+
+ \section1 ToolTip Control
+
+ \image qtquickcontrols2-tooltip.png
+
+ \l ToolTip shows a short piece of text that informs the user of a control's
+ function. It is typically placed above or below the parent control.
+
+ Recommendations:
+ \list
+ \li Use a tooltip if a control has little or no descriptive text, or needs
+ a short explanation.
+ \li Use a tooltip only if the information on a particular control is not
+ available elsewhere in the screen.
+ \li Keep the tooltip text short so that it does not cover other content
+ while being displayed.
+ \endlist
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-qmltypes.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-qmltypes.qdoc
new file mode 100644
index 0000000000..f1ff074b57
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-qmltypes.qdoc
@@ -0,0 +1,106 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \qmlmodule QtQuick.Controls
+ \keyword Qt Quick Controls QML Types
+ \title Qt Quick Controls QML Types
+ \keyword Qt Quick Controls 2 QML Types
+ \ingroup qmlmodules
+ \brief Provides QML types for user interfaces (Qt Quick Controls).
+
+ \l{Qt Quick Controls} provides QML types for creating user interfaces.
+ These QML types work in conjunction with \l{Qt Quick} and
+ \l{Qt Quick Layouts}.
+
+ Qt Quick Controls QML types can be imported into your application
+ using the following import statement in your .qml file:
+
+ \qml
+ import QtQuick.Controls
+ \endqml
+
+ \section1 QML Types
+ \generatelist {qmltypesbymodule QtQuick.Controls}
+ \noautolist
+
+ \section1 Using Qt Quick Controls types in property declarations
+
+ As mentioned in \l {Qt Quick Templates 2 QML Types}, each type in Qt Quick
+ Controls is backed by a C++ "template" type. These types are \l {Qt Quick
+ Templates 2}{non-visual implementations of controls' logic and behavior}.
+
+ For example, the \l Menu type's API and behavior is defined by the C++
+ type in Qt Quick Templates. Each \l {Definition of a Style}{style} that
+ wants to provide a Menu must have a Menu.qml available, and the root
+ item in that file must be the Menu from Qt Quick Templates. When you
+ import QtQuick.Controls and create a Menu in QML, the type you get is
+ actually the QML Menu defined by the style's Menu.qml.
+
+ In order to use a control as the type in a property declaration, you should
+ use the corresponding type from Qt Quick Templates. For example, suppose
+ you had a \c PopupOpener component, which was a Button that opened a
+ Popup:
+
+ \qml
+ // PopupButton.qml
+ import QtQuick.Controls
+
+ Button {
+ required property Popup popup
+
+ onClicked: popup.open()
+ }
+
+ // main.qml
+ PopupButton {
+ popup: saveChangesDialog
+ }
+
+ Dialog {
+ id: saveChangesDialog
+
+ // ...
+ }
+ \endqml
+
+ Running this code will result in an error:
+
+ \badcode
+ Unable to assign Dialog_QMLTYPE to Popup_QMLTYPE
+ \endcode
+
+ This is because of the inheritance hierarchy:
+
+ \badcode
+ Popup (C++ type in QtQuick.Templates)
+ │ └── Popup (QML type in QtQuick.Controls)
+ └── Dialog (C++ type in QtQuick.Templates)
+ └── Dialog (QML type in QtQuick.Controls)
+ \endcode
+
+ Dialog from \c QtQuick.Controls does not derive from the Popup from
+ \c QtQuick.Controls, but from \c QtQuick.Templates.
+
+ Instead, use the Popup from Qt Quick Templates as the property type:
+
+ \qml
+ // PopupButton.qml
+ import QtQuick.Controls
+ import QtQuick.Templates as T
+
+ Button {
+ required property T.Popup popup
+
+ onClicked: popup.open()
+ }
+ \endqml
+
+ For more information on the Qt Quick Controls module, see the
+ \l {Qt Quick Controls} module documentation.
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-separators.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-separators.qdoc
new file mode 100644
index 0000000000..1105a5bf5f
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-separators.qdoc
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-separators.html
+ \title Separator Controls
+ \ingroup qtquickcontrols2-guidelines
+ \brief Guidelines for separator controls
+
+ Qt Quick Controls offers a selection of separators.
+
+ \annotatedlist qtquickcontrols2-separators
+
+ Each type of separator has its own specific use case. The following
+ sections offer guidelines for choosing the appropriate type of separator,
+ depending on the use case.
+
+ \section1 MenuSeparator Control
+
+ \image qtquickcontrols2-menuseparator.png
+
+ \l MenuSeparator should be used to separate items (typically MenuItem
+ controls) in a Menu. Grouping related menu items together makes it easier
+ for the user to interact with the menu. For example, a typical desktop
+ user interface might have \c Undo and \c Redo items in one group, and
+ \c Cut, \c Copy and \c Paste in another.
+
+ \section1 ToolSeparator Control
+
+ \image qtquickcontrols2-toolseparator.png
+
+ \l ToolSeparator should be used to separate items (typically ToolButton
+ controls) in a ToolBar. It can be used in horizontal or vertical toolbars.
+
+ \section1 Related Information
+ \list
+ \li \l {Qt Quick Controls Guidelines}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-styles.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-styles.qdoc
new file mode 100644
index 0000000000..df79e08e3f
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-styles.qdoc
@@ -0,0 +1,204 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-styles.html
+ \title Styling Qt Quick Controls
+
+ \section1 Available Styles
+
+ Qt Quick Controls comes with a selection of styles.
+
+ \section2 Basic Style
+
+ \image qtquickcontrols2-basic-thumbnail.png
+ The \l {Basic Style} is a simple and light-weight all-round style that offers
+ the maximum performance for Qt Quick Controls.
+
+ \section2 Fusion Style
+
+ \image qtquickcontrols2-fusion-thumbnail.png
+ The \l {Fusion Style} is a platform-agnostic style that offers a desktop-oriented
+ look and feel for Qt Quick Controls.
+
+ \section2 Imagine Style
+
+ \image qtquickcontrols2-imagine-thumbnail.png
+ The \l {Imagine Style} is based on image assets. The style comes with a default
+ set of images which can easily be changed by providing a directory
+ with images using a predefined naming convention.
+
+ \section2 macOS Style
+
+ \image qtquickcontrols2-macos-thumbnail.png
+ The \l {macOS Style} is a native-looking style for macOS.
+ \note this style is only available for applications running on macOS.
+
+
+ \section2 iOS Style
+
+ The \l {iOS Style} is a native-looking style for iOS based on image assets.
+ \note this style is only available for applications running on iOS.
+
+ \section2 Material Style
+
+ \image qtquickcontrols2-material-thumbnail.png
+ The \l {Material Style} offers an appealing design based on the
+ \l {https://www.google.com/design/spec/material-design/introduction.html}
+ {Google Material Design Guidelines}, but requires more system resources than
+ the Basic style.
+
+ \section2 Universal Style
+
+ \image qtquickcontrols2-universal-thumbnail.png
+ The \l {Universal Style} offers an appealing design based on the
+ \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines},
+ but requires more system resources than the Basic style.
+
+ \section2 Windows Style
+
+ \image qtquickcontrols2-windows-thumbnail.png
+ The \l {Windows Style} is a native-looking style for Windows.
+ \note this style is only available for applications running on Windows.
+
+ \section1 Using Styles in Qt Quick Controls
+
+ \section2 Default Styles
+
+ If no style is explicitly set, a default style will be used. The style that
+ is used depends on the operating system:
+
+ \list
+ \li Android: \l {Material Style}
+ \li iOS: \l {iOS Style}
+ \li Linux: \l {Fusion Style}
+ \li macOS: \l {macOS Style}
+ \li Windows: \l {Windows Style}
+ \endlist
+
+ For all other operating systems, the \l {Basic Style} is used.
+
+ \section2 Compile-Time Style Selection
+
+ Compile-time style selection is a way of specifying a style to use by
+ importing it in QML. For example, to import the Material style:
+
+ \qml
+ import QtQuick.Controls.Material
+
+ ApplicationWindow {
+ // ...
+ }
+ \endqml
+
+ Notice that QtQuick.Controls (which is responsible for run-time style
+ selection) is not imported. The fallback style is specified by the qmldir
+ of the style:
+
+ \badcode
+ module QtQuick.Controls.Material
+ # ...
+ import QtQuick.Controls.Basic auto
+ \endcode
+
+ The benefit of compile-time style selection is that the QtQuick.Controls plugin
+ is not used and therefore does not need to be deployed with the application.
+
+ Explicit imports are also necessary if your application is built
+ \l {Static Builds}{statically}.
+
+ \section2 Run-Time Style Selection
+
+ Run-time style selection is a way of specifying a style to use by importing
+ \c QtQuick.Controls:
+
+ \qml
+ import QtQuick.Controls
+ \endqml
+
+ The QtQuick.Controls plugin will import the style and fallback
+ style that were set at runtime via one of the following approaches:
+
+ \list
+ \li \l[CPP]{QQuickStyle::setStyle()}
+ \li The \c -style command line argument
+ \li The \c QT_QUICK_CONTROLS_STYLE environment variable
+ \li The \c qtquickcontrols2.conf configuration file
+ \endlist
+
+ The priority of these approaches follows the order they are listed,
+ from highest to lowest. That is, using \c QQuickStyle to set the style will
+ always take priority over using the command line argument, for example.
+
+ The benefit of run-time style selection is that a single application binary
+ can support multiple styles, meaning that the end user can choose which
+ style to run the application with.
+
+ \section3 Using QQuickStyle in C++
+
+ \l[CPP]{QQuickStyle} provides C++ API for configuring a specific
+ style. The following example runs a Qt Quick Controls application
+ with the Material style:
+
+ \code
+ QQuickStyle::setStyle("Material");
+ \endcode
+
+ See the detailed description of \l[CPP]{QQuickStyle} for more
+ details.
+
+ \section3 Command line argument
+
+ Passing a \c -style command line argument is the convenient way to test different
+ styles. It takes precedence over the other methods listed below. The following
+ example runs a Qt Quick Controls application with the Material style:
+
+ \code
+ ./app -style material
+ \endcode
+
+ \section3 Environment variable
+
+ Setting the \c QT_QUICK_CONTROLS_STYLE environment variable can be used to set
+ a system-wide style preference. It takes precedence over the configuration file
+ mentioned below. The following example runs a Qt Quick Controls application with
+ the Universal style:
+
+ \code
+ QT_QUICK_CONTROLS_STYLE=universal ./app
+ \endcode
+
+ See \l {Supported Environment Variables in Qt Quick Controls} for the full list
+ of supported environment variables.
+
+ \section3 Configuration file
+
+ Qt Quick Controls support a special configuration file, \c :/qtquickcontrols2.conf,
+ that is built into an application's resources.
+
+ The configuration file can specify the preferred style (may be overridden by either
+ of the methods described earlier) and certain style-specific attributes. The following
+ example specifies that the preferred style is the Material style.
+
+ \code
+ [Controls]
+ Style=Material
+ \endcode
+
+ See \l {Qt Quick Controls Configuration File} for more details about the
+ configuration file.
+
+ \section1 Related Information
+ \list
+ \li \l {Basic Style}
+ \li \l {Fusion Style}
+ \li \l {Imagine Style}
+ \li \l {Material Style}
+ \li \l {Universal Style}
+ \li \l {Customizing Qt Quick Controls}
+ \li \l {Using File Selectors with Qt Quick Controls}
+ \li \l {Deploying Qt Quick Controls Applications}
+ \li \l {Qt Quick Controls Configuration File}
+ \li \l {Supported Environment Variables in Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-universal.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-universal.qdoc
new file mode 100644
index 0000000000..4dfdebb963
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-universal.qdoc
@@ -0,0 +1,264 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-universal.html
+ \title Universal Style
+
+ The Universal Style is based on the Microsoft Universal Design Guidelines.
+ \l {detailed-desc-universal}{More...}
+
+ \styleimport {QtQuick.Controls.Universal 2.12} {Qt 5.7}
+
+ \section1 Attached Properties
+
+ \list
+ \li \l {universal-accent-attached-prop}{\b accent} : color
+ \li \l {universal-background-attached-prop}{\b background} : color
+ \li \l {universal-foreground-attached-prop}{\b foreground} : color
+ \li \l {universal-theme-attached-prop}{\b theme} : enumeration
+ \endlist
+
+ \section1 Attached Methods
+
+ \list
+ \li color \l {color-attached-method}{\b color}(enumeration predefined)
+ \endlist
+
+ \section1 Detailed Description
+ \target detailed-desc-universal
+
+ The Universal style is a device-agnostic style based on the
+ \l {https://dev.windows.com/design}{Microsoft Universal Design Guidelines}.
+ The Universal style has been designed to look good on all devices, from
+ phones and tablets to PCs.
+
+ \table
+ \row
+ \li \image qtquickcontrols2-universal-light.png
+ \caption The Universal style in light theme
+ \li \image qtquickcontrols2-universal-dark.png
+ \caption The Universal style in dark theme
+ \endtable
+
+ To run an application with the Universal style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \note The Universal style is not a native Windows 10 style. The Universal
+ style is a 100% cross-platform Qt Quick Controls style implementation that
+ follows the Microsoft Universal Design Guidelines. The style runs on any
+ platform, and looks more or less identical everywhere. Minor differences
+ may occur due to differences in available system fonts and font rendering
+ engines.
+
+ \section2 Customization
+
+ The Universal style allows customizing four attributes, \l {universal-theme-attached-prop}{theme},
+ \l {universal-accent-attached-prop}{accent}, \l {universal-foreground-attached-prop}{foreground}, and
+ \l {universal-background-attached-prop}{background}.
+
+ \image qtquickcontrols2-universal-attributes.png
+
+ Both attributes can be specified for any window or item, and they automatically
+ propagate to children in the same manner as \l {Control::font}{fonts}. In the
+ following example, the window and all three radio buttons appear in the dark
+ theme using a violet accent color:
+
+ \table
+ \row
+ \li
+ \qml
+ import QtQuick 2.12
+ import QtQuick.Controls 2.12
+ import QtQuick.Controls.Universal 2.12
+
+ ApplicationWindow {
+ visible: true
+
+ Universal.theme: Universal.Dark
+ Universal.accent: Universal.Violet
+
+ Column {
+ anchors.centerIn: parent
+
+ RadioButton { text: qsTr("Small") }
+ RadioButton { text: qsTr("Medium"); checked: true }
+ RadioButton { text: qsTr("Large") }
+ }
+ }
+ \endqml
+ \li
+ \image qtquickcontrols2-universal-violet.png
+ \endtable
+
+ In addition to specifying the attributes in QML, it is also possible to
+ specify them via environment variables or in a configuration file. Attributes
+ specified in QML take precedence over all other methods.
+
+ \section3 Configuration File
+
+ \include qquickuniversalstyle.qdocinc conf
+
+ See \l {Qt Quick Controls Configuration File} for more details about the
+ configuration file.
+
+ \section3 Environment Variables
+
+ \include qquickuniversalstyle.qdocinc env
+
+ See \l {Supported Environment Variables in Qt Quick Controls} for the full
+ list of supported environment variables.
+
+ \section2 Dependency
+
+ The Universal style must be separately imported to gain access to the
+ attributes that are specific to the Universal style. It should be noted
+ that regardless of the references to the Universal style, the same
+ application code runs with any other style. Universal-specific attributes
+ only have an effect when the application is run with the Universal style.
+
+ If the Universal style is imported in a QML file that is always loaded, the
+ Universal style must be deployed with the application in order to be able
+ to run the application regardless of which style the application is run with.
+ By using \l {Using File Selectors with Qt Quick Controls}{file selectors},
+ style-specific tweaks can be applied without creating a hard dependency to
+ a style.
+
+ \section2 Pre-defined Universal Colors
+
+ Available pre-defined colors:
+ \value Universal.Lime \stylecolor {#A4C400} {}
+ \value Universal.Green \stylecolor {#60A917} {}
+ \value Universal.Emerald \stylecolor {#008A00} {}
+ \value Universal.Teal \stylecolor {#00ABA9} {}
+ \value Universal.Cyan \stylecolor {#1BA1E2} {}
+ \value Universal.Cobalt \stylecolor {#3E65FF} {(default accent)}
+ \value Universal.Indigo \stylecolor {#6A00FF} {}
+ \value Universal.Violet \stylecolor {#AA00FF} {}
+ \value Universal.Pink \stylecolor {#F472D0} {}
+ \value Universal.Magenta \stylecolor {#D80073} {}
+ \value Universal.Crimson \stylecolor {#A20025} {}
+ \value Universal.Red \stylecolor {#E51400} {}
+ \value Universal.Orange \stylecolor {#FA6800} {}
+ \value Universal.Amber \stylecolor {#F0A30A} {}
+ \value Universal.Yellow \stylecolor {#E3C800} {}
+ \value Universal.Brown \stylecolor {#825A2C} {}
+ \value Universal.Olive \stylecolor {#6D8764} {}
+ \value Universal.Steel \stylecolor {#647687} {}
+ \value Universal.Mauve \stylecolor {#76608A} {}
+ \value Universal.Taupe \stylecolor {#87794E} {}
+
+ \b {See also} \l {Basic Style}, \l {Material Style}
+
+ \section1 Attached Property Documentation
+
+ \styleproperty {Universal.accent} {color} {universal-accent-attached-prop}
+ \target universal-accent-attached-prop
+ This attached property holds the accent color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is \c Universal.Cobalt.
+
+ In the following example, the accent color of the highlighted button is
+ changed to \c Universal.Orange:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-universal-accent.qml 1
+ \li
+ \image qtquickcontrols2-universal-accent.png
+ \endtable
+
+ \note Even though the accent can be any \l {colorvaluetypedocs}{color}, it is
+ recommended to use one of the \l {pre-defined Universal colors} that have been
+ designed to work well with the rest of the Universal style palette.
+
+ \endstyleproperty
+
+ \styleproperty {Universal.background} {color} {universal-background-attached-prop}
+ \target universal-background-attached-prop
+ This attached property holds the background color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is theme-specific (light or dark).
+
+ In the following example, the background color of the pane is changed to
+ \c Universal.Steel:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-universal-background.qml 1
+ \li
+ \image qtquickcontrols2-universal-background.png
+ \endtable
+
+ \endstyleproperty
+
+ \styleproperty {Universal.foreground} {color} {universal-foreground-attached-prop}
+ \target universal-foreground-attached-prop
+ This attached property holds the foreground color of the theme. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ The default value is theme-specific (light or dark).
+
+ In the following example, the foreground color of the button is set to \c
+ Universal.Pink:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-universal-foreground.qml 1
+ \li
+ \image qtquickcontrols2-universal-foreground.png
+ \endtable
+
+ \styleproperty {Universal.theme} {enumeration} {universal-theme-attached-prop}
+ \target universal-theme-attached-prop
+ This attached property holds whether the theme is light or dark. The property
+ can be attached to any window or item. The value is propagated to children.
+
+ Available themes:
+ \value Universal.Light Light theme (default)
+ \value Universal.Dark Dark theme
+ \value Universal.System System theme
+
+ Setting the theme to \c System chooses either the light or dark theme based
+ on the system theme colors. However, when reading the value of the theme
+ property, the value is never \c System, but the actual theme.
+
+ In the following example, the theme for both the pane and the button is set
+ to \c Universal.Dark:
+
+ \table
+ \row
+ \li
+ \snippet qtquickcontrols2-universal-theme.qml 1
+ \li
+ \image qtquickcontrols2-universal-theme.png
+ \endtable
+
+ \endstyleproperty
+
+ \section1 Attached Method Documentation
+
+ \stylemethod {color} {color} {enumeration} {predefined} {color-attached-method}
+ \target color-attached-method
+ This attached method returns the effective color value of the specified
+ \l {pre-defined Universal colors}{pre-defined Universal color}.
+
+ \qml
+ Rectangle {
+ color: Universal.color(Universal.Red)
+ }
+ \endqml
+
+ \endstylemethod
+
+ \section1 Related Information
+
+ \list
+ \li \l{Styling Qt Quick Controls}
+ \endlist
+*/
diff --git a/src/quickcontrols/doc/src/qtquickcontrols2-windows.qdoc b/src/quickcontrols/doc/src/qtquickcontrols2-windows.qdoc
new file mode 100644
index 0000000000..e068f3c86d
--- /dev/null
+++ b/src/quickcontrols/doc/src/qtquickcontrols2-windows.qdoc
@@ -0,0 +1,47 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only
+
+/*!
+ \page qtquickcontrols2-windows.html
+ \title Windows Style
+
+ The Windows style is a style that looks native on Windows.
+ \l {detailed-desc-Windows}{More...}
+
+ \styleimport {QtQuick.Controls.Windows} {Qt 6.0}
+
+ \target detailed-desc-Windows
+
+ The Windows style is a style that looks native on Windows. The controls are drawn run-time using
+ native libraries, and is therefore only available for applications running on Windows.
+
+ \note Be aware that the apperance of this style can change from one minor Qt version to the
+ next, to better blend in with native applications on the platform.
+
+ \table
+ \row
+ \li \image qtquickcontrols2-windows.png
+ \caption The Windows style
+ \endtable
+
+ To run an application with the Windows style, see
+ \l {Using Styles in Qt Quick Controls}.
+
+ \section2 Current state
+
+ The Windows style is under development, and some controls are not yet supported. Those
+ controls are: \l BusyIndicator, \l DelayButton, \l PageIndicator, \l RangeSlider, \l Switch, \l TabBar and
+ \l Tumbler. Those will fall back to use the \l {Fusion Style}.
+
+ \section2 Customization
+
+ The goal of the Windows style is to for the controls look and feel as similar as possible to the
+ native controls on Windows. The style will follow the theme and colors configured globally from
+ Windows Settings, and does not come with a separate customization API on top of that.
+
+ \note The Windows style is not suitable for \l {Customizing Qt Quick Controls}{customizing}.
+ The main reason is that it sometimes draw both the contents and the background
+ onto a single background item, which will not look good together with a custom contentItem.
+ It also tends to use padding and inset values that are different from the other styles.
+ \include customizing-native-styles.qdocinc
+*/
diff --git a/src/quickcontrols/fusion/ApplicationWindow.qml b/src/quickcontrols/fusion/ApplicationWindow.qml
new file mode 100644
index 0000000000..fbd1cc2e76
--- /dev/null
+++ b/src/quickcontrols/fusion/ApplicationWindow.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ApplicationWindow {
+ id: window
+
+ color: window.palette.window
+}
diff --git a/src/quickcontrols/fusion/BusyIndicator.qml b/src/quickcontrols/fusion/BusyIndicator.qml
new file mode 100644
index 0000000000..dcd2f23f49
--- /dev/null
+++ b/src/quickcontrols/fusion/BusyIndicator.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.BusyIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ contentItem: BusyIndicatorImpl {
+ implicitWidth: 28
+ implicitHeight: 28
+ color: control.palette.text
+
+ running: control.running
+ opacity: control.running ? 1 : 0
+ Behavior on opacity { OpacityAnimator { duration: 250 } }
+
+ RotationAnimator on rotation {
+ running: control.running || control.contentItem.visible
+ from: 0
+ to: 360
+ duration: 1000
+ loops: Animation.Infinite
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/Button.qml b/src/quickcontrols/fusion/Button.qml
new file mode 100644
index 0000000000..2ee8e12373
--- /dev/null
+++ b/src/quickcontrols/fusion/Button.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 4
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: ButtonPanel {
+ implicitWidth: 80
+ implicitHeight: 24
+
+ control: control
+ visible: !control.flat || control.down || control.checked || control.highlighted || control.visualFocus
+ || (enabled && control.hovered)
+ }
+}
diff --git a/src/quickcontrols/fusion/CMakeLists.txt b/src/quickcontrols/fusion/CMakeLists.txt
new file mode 100644
index 0000000000..69f8f5f96d
--- /dev/null
+++ b/src/quickcontrols/fusion/CMakeLists.txt
@@ -0,0 +1,151 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2fusionstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "ApplicationWindow.qml"
+ "BusyIndicator.qml"
+ "Button.qml"
+ "CheckBox.qml"
+ "CheckDelegate.qml"
+ "ComboBox.qml"
+ "DelayButton.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+ "Drawer.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "HorizontalHeaderView.qml"
+ "ItemDelegate.qml"
+ "Label.qml"
+ "Menu.qml"
+ "MenuBar.qml"
+ "MenuBarItem.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+ "Page.qml"
+ "PageIndicator.qml"
+ "Pane.qml"
+ "Popup.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "RadioDelegate.qml"
+ "RangeSlider.qml"
+ "RoundButton.qml"
+ "ScrollBar.qml"
+ "ScrollView.qml"
+ "ScrollIndicator.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "SplitView.qml"
+ "SwipeDelegate.qml"
+ "SwitchDelegate.qml"
+ "Switch.qml"
+ "TabBar.qml"
+ "TabButton.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ToolBar.qml"
+ "ToolButton.qml"
+ "ToolSeparator.qml"
+ "ToolTip.qml"
+ "TreeViewDelegate.qml"
+ "Tumbler.qml"
+ "VerticalHeaderView.qml"
+)
+set_source_files_properties(DelayButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(Dialog.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(DialogButtonBox.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(HorizontalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+set_source_files_properties(MenuBar.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuBarItem.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(RoundButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(SplitView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.13;6.0"
+)
+set_source_files_properties(ToolSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(VerticalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2fusionstyleplugin
+ URI "QtQuick.Controls.Fusion"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2FusionStylePlugin
+ DEPENDENCIES
+ QtQuick/auto
+ IMPORTS
+ QtQuick.Controls.Basic/auto
+ PLUGIN_TARGET qtquickcontrols2fusionstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickfusionstyle.cpp qquickfusionstyle_p.h
+ qquickfusiontheme.cpp qquickfusiontheme_p.h
+ qtquickcontrols2fusionstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+qt_internal_add_resource(qtquickcontrols2fusionstyleplugin "qtquickcontrols2fusionstyle"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/Fusion"
+ FILES
+ "images/arrow.png"
+ "images/arrow@2x.png"
+ "images/arrow@3x.png"
+ "images/arrow@4x.png"
+ "images/checkmark.png"
+ "images/checkmark@2x.png"
+ "images/checkmark@3x.png"
+ "images/checkmark@4x.png"
+ "images/progressmask.png"
+ "images/progressmask@2x.png"
+ "images/progressmask@3x.png"
+ "images/progressmask@4x.png"
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2fusionstyleplugin quickwindow)
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2fusionstyleplugin
+ qtquickcontrols2fusionstyleimplplugin)
+
+# Basic style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2fusionstyleplugin
+ qtquickcontrols2basicstyleplugin)
diff --git a/src/quickcontrols/fusion/CheckBox.qml b/src/quickcontrols/fusion/CheckBox.qml
new file mode 100644
index 0000000000..414414804d
--- /dev/null
+++ b/src/quickcontrols/fusion/CheckBox.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/fusion/CheckDelegate.qml b/src/quickcontrols/fusion/CheckDelegate.qml
new file mode 100644
index 0000000000..f14deaa16a
--- /dev/null
+++ b/src/quickcontrols/fusion/CheckDelegate.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.CheckDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ indicator: CheckIndicator {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ control: control
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 20
+ color: control.down ? Fusion.buttonColor(control.palette, false, true, true)
+ : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/fusion/ComboBox.qml b/src/quickcontrols/fusion/ComboBox.qml
new file mode 100644
index 0000000000..6caa7d3f94
--- /dev/null
+++ b/src/quickcontrols/fusion/ComboBox.qml
@@ -0,0 +1,140 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ComboBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+ rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+
+ delegate: MenuItem {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ width: 20
+ fillMode: Image.Pad
+ }
+
+ contentItem: T.TextField {
+ topPadding: 4
+ leftPadding: 4 - control.padding
+ rightPadding: 4 - control.padding
+ bottomPadding: 4
+
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+
+ background: PaddedRectangle {
+ clip: true
+ radius: 2
+ padding: 1
+ leftPadding: control.mirrored ? -2 : padding
+ rightPadding: !control.mirrored ? -2 : padding
+ color: control.palette.base
+ visible: control.editable && !control.flat
+
+ Rectangle {
+ x: parent.width - width
+ y: 1
+ width: 1
+ height: parent.height - 2
+ color: Fusion.buttonOutline(control.palette, control.activeFocus, control.enabled)
+ }
+
+ Rectangle {
+ x: 1
+ y: 1
+ width: parent.width - 3
+ height: 1
+ color: Fusion.topShadow
+ }
+ }
+
+ Rectangle {
+ x: 1 - control.leftPadding
+ y: 1
+ width: control.width - 2
+ height: control.height - 2
+ color: "transparent"
+ border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255)
+ visible: control.activeFocus
+ radius: 1.7
+ }
+ }
+
+ background: ButtonPanel {
+ implicitWidth: 120
+ implicitHeight: 24
+
+ control: control
+ visible: !control.flat || control.down
+ // ### TODO: fix control.contentItem.activeFocus
+ highlighted: control.visualFocus || control.contentItem.activeFocus
+ }
+
+ popup: T.Popup {
+ width: control.width
+ height: Math.min(contentItem.implicitHeight + 2, control.Window.height - topMargin - bottomMargin)
+ topMargin: 6
+ bottomMargin: 6
+ padding: 1
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightRangeMode: ListView.ApplyRange
+ highlightMoveDuration: 0
+
+ T.ScrollBar.vertical: ScrollBar { }
+ }
+
+ background: Rectangle {
+ color: control.popup.palette.window
+ border.color: Fusion.outline(control.palette)
+
+ Rectangle {
+ z: -1
+ x: 1; y: 1
+ width: parent.width
+ height: parent.height
+ color: control.palette.shadow
+ opacity: 0.2
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/DelayButton.qml b/src/quickcontrols/fusion/DelayButton.qml
new file mode 100644
index 0000000000..8dde74f468
--- /dev/null
+++ b/src/quickcontrols/fusion/DelayButton.qml
@@ -0,0 +1,82 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.DelayButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ transition: Transition {
+ NumberAnimation {
+ duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
+ }
+ }
+
+ contentItem: ItemGroup {
+ ClippedText {
+ clip: control.progress > 0
+ clipX: -control.leftPadding + (control.mirrored ? 0 : control.progress * control.width)
+ clipWidth: control.width
+ visible: control.mirrored ? control.progress > 0 : control.progress < 1
+
+ text: control.text
+ font: control.font
+ color: control.mirrored ? control.palette.brightText : control.palette.buttonText
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ ClippedText {
+ clip: control.progress > 0
+ clipX: -control.leftPadding
+ clipWidth: (control.mirrored ? 1.0 - control.progress : control.progress) * control.width
+ visible: control.mirrored ? control.progress < 1 : control.progress > 0
+
+ text: control.text
+ font: control.font
+ color: control.mirrored ? control.palette.buttonText : control.palette.brightText
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+ }
+
+ background: ButtonPanel {
+ implicitWidth: 80
+ implicitHeight: 24
+
+ control: control
+ highlighted: false
+ scale: control.mirrored ? -1 : 1
+
+ Rectangle {
+ width: control.progress * parent.width
+ height: parent.height
+
+ radius: 2
+ border.color: Qt.darker(Fusion.highlight(control.palette), 1.4)
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.lighter(Fusion.highlight(control.palette), 1.2)
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.highlight(control.palette)
+ }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/Dial.qml b/src/quickcontrols/fusion/Dial.qml
new file mode 100644
index 0000000000..7fa0af3379
--- /dev/null
+++ b/src/quickcontrols/fusion/Dial.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ background: DialImpl {
+ implicitWidth: 100
+ implicitHeight: 100
+ highlight: control.visualFocus
+ }
+
+ handle: KnobImpl {
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+ width: control.width / 7
+ height: control.height / 7
+ transform: [
+ Translate {
+ y: -Math.min(control.background.width, control.background.height) * 0.42 + control.handle.height
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: control.handle.width / 2
+ origin.y: control.handle.height / 2
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/fusion/Dialog.qml b/src/quickcontrols/fusion/Dialog.qml
new file mode 100644
index 0000000000..f17321bcc0
--- /dev/null
+++ b/src/quickcontrols/fusion/Dialog.qml
@@ -0,0 +1,66 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ padding: 6
+
+ background: Rectangle {
+ color: control.palette.window
+ border.color: control.palette.mid
+ radius: 2
+
+ Rectangle {
+ z: -1
+ x: 1; y: 1
+ width: parent.width
+ height: parent.height
+ color: control.palette.shadow
+ opacity: 0.2
+ radius: 2
+ }
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ padding: 6
+ background: Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 1
+ color: control.palette.window
+ radius: 2
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Fusion.topShadow
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Fusion.topShadow
+ }
+}
diff --git a/src/quickcontrols/fusion/DialogButtonBox.qml b/src/quickcontrols/fusion/DialogButtonBox.qml
new file mode 100644
index 0000000000..566058fa73
--- /dev/null
+++ b/src/quickcontrols/fusion/DialogButtonBox.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 6
+ alignment: Qt.AlignRight
+
+ delegate: Button { }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: Rectangle {
+ implicitHeight: 32
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ color: control.palette.window
+ radius: 2
+ }
+}
diff --git a/src/quickcontrols/fusion/Drawer.qml b/src/quickcontrols/fusion/Drawer.qml
new file mode 100644
index 0000000000..713ac0c076
--- /dev/null
+++ b/src/quickcontrols/fusion/Drawer.qml
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: control.edge === Qt.BottomEdge
+ leftPadding: control.edge === Qt.RightEdge
+ rightPadding: control.edge === Qt.LeftEdge
+ bottomPadding: control.edge === Qt.TopEdge
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ background: Rectangle {
+ color: control.palette.window
+ readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
+ Rectangle {
+ width: parent.horizontal ? 1 : parent.width
+ height: parent.horizontal ? parent.height : 1
+ color: control.palette.mid
+ x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0
+ y: control.edge === Qt.TopEdge ? parent.height - 1 : 0
+ }
+ Rectangle {
+ width: parent.horizontal ? 1 : parent.width
+ height: parent.horizontal ? parent.height : 1
+ color: control.palette.shadow
+ opacity: 0.2
+ x: control.edge === Qt.LeftEdge ? parent.width : 0
+ y: control.edge === Qt.TopEdge ? parent.height : 0
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Fusion.topShadow
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Fusion.topShadow
+ }
+}
diff --git a/src/quickcontrols/fusion/Frame.qml b/src/quickcontrols/fusion/Frame.qml
new file mode 100644
index 0000000000..0512639f4e
--- /dev/null
+++ b/src/quickcontrols/fusion/Frame.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 9
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: Qt.lighter(Fusion.outline(control.palette), 1.08)
+ }
+}
diff --git a/src/quickcontrols/fusion/GroupBox.qml b/src/quickcontrols/fusion/GroupBox.qml
new file mode 100644
index 0000000000..5e949dc5cb
--- /dev/null
+++ b/src/quickcontrols/fusion/GroupBox.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 9
+ topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+
+ label: Text {
+ x: control.leftPadding
+ width: control.availableWidth
+
+ text: control.title
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+
+ radius: 2
+ color: Color.transparent("black", 3 / 255)
+ border.color: Qt.lighter(Fusion.outline(control.palette), 1.08)
+ }
+}
diff --git a/src/quickcontrols/fusion/HorizontalHeaderView.qml b/src/quickcontrols/fusion/HorizontalHeaderView.qml
new file mode 100644
index 0000000000..aafe0fb2fd
--- /dev/null
+++ b/src/quickcontrols/fusion/HorizontalHeaderView.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.HorizontalHeaderView {
+ id: control
+
+ implicitWidth: syncView ? syncView.width : 0
+ implicitHeight: contentHeight
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: text.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
+ border.color: "#cacaca"
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: "#fbfbfb"
+ }
+ GradientStop {
+ position: 1
+ color: "#e0dfe0"
+ }
+ }
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ItemDelegate.qml b/src/quickcontrols/fusion/ItemDelegate.qml
new file mode 100644
index 0000000000..5a3e9c45ea
--- /dev/null
+++ b/src/quickcontrols/fusion/ItemDelegate.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 20
+ color: control.down ? Fusion.buttonColor(control.palette, false, true, true)
+ : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/fusion/Label.qml b/src/quickcontrols/fusion/Label.qml
new file mode 100644
index 0000000000..9a715d9ed8
--- /dev/null
+++ b/src/quickcontrols/fusion/Label.qml
@@ -0,0 +1,15 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Label {
+ id: control
+
+ color: control.palette.windowText
+ linkColor: control.palette.link
+}
diff --git a/src/quickcontrols/fusion/Menu.qml b/src/quickcontrols/fusion/Menu.qml
new file mode 100644
index 0000000000..e0f565a69b
--- /dev/null
+++ b/src/quickcontrols/fusion/Menu.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+import QtQuick.Window
+
+T.Menu {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 0
+ padding: 1
+ overlap: 2
+
+ delegate: MenuItem { }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 20
+
+ color: control.palette.base
+ border.color: Fusion.outline(control.palette)
+
+ Rectangle {
+ z: -1
+ x: 1; y: 1
+ width: parent.width
+ height: parent.height
+ color: control.palette.shadow
+ opacity: 0.2
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Fusion.topShadow
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Fusion.topShadow
+ }
+}
diff --git a/src/quickcontrols/fusion/MenuBar.qml b/src/quickcontrols/fusion/MenuBar.qml
new file mode 100644
index 0000000000..6e039d8a3e
--- /dev/null
+++ b/src/quickcontrols/fusion/MenuBar.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.MenuBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuBarItem { }
+
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.contentModel
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 20
+
+ color: control.palette.window
+
+ Rectangle {
+ y: parent.height - height
+ width: parent.width
+ height: 1
+ color: Fusion.mergedColors(Qt.darker(control.palette.window, 1.2),
+ Qt.lighter(Fusion.outline(control.palette), 1.4), 60)
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/MenuBarItem.qml b/src/quickcontrols/fusion/MenuBarItem.qml
new file mode 100644
index 0000000000..299c34416b
--- /dev/null
+++ b/src/quickcontrols/fusion/MenuBarItem.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.MenuBarItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 20
+ implicitHeight: 20
+
+ color: Fusion.highlight(control.palette)
+ visible: control.down || control.highlighted
+ }
+}
diff --git a/src/quickcontrols/fusion/MenuItem.qml b/src/quickcontrols/fusion/MenuItem.qml
new file mode 100644
index 0000000000..ce701b74f4
--- /dev/null
+++ b/src/quickcontrols/fusion/MenuItem.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
+ readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
+ rightPadding: control.mirrored ? indicatorPadding : arrowPadding
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.down || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ arrow: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: 20
+
+ visible: control.subMenu
+ rotation: control.mirrored ? 90 : -90
+ color: control.down || control.hovered || control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ fillMode: Image.Pad
+ }
+
+ indicator: CheckIndicator {
+ x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ control: control
+ visible: control.checkable
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 20
+
+ color: Fusion.highlight(control.palette)
+ visible: control.down || control.highlighted
+ }
+}
diff --git a/src/quickcontrols/fusion/MenuSeparator.qml b/src/quickcontrols/fusion/MenuSeparator.qml
new file mode 100644
index 0000000000..b27dcf4a59
--- /dev/null
+++ b/src/quickcontrols/fusion/MenuSeparator.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 5
+ verticalPadding: 1
+
+ contentItem: Rectangle {
+ implicitWidth: 188
+ implicitHeight: 1
+ color: Qt.lighter(Fusion.darkShade, 1.06)
+ }
+}
diff --git a/src/quickcontrols/fusion/Page.qml b/src/quickcontrols/fusion/Page.qml
new file mode 100644
index 0000000000..65a752318d
--- /dev/null
+++ b/src/quickcontrols/fusion/Page.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Page {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/fusion/PageIndicator.qml b/src/quickcontrols/fusion/PageIndicator.qml
new file mode 100644
index 0000000000..c6f235a9da
--- /dev/null
+++ b/src/quickcontrols/fusion/PageIndicator.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 4
+ spacing: 4
+
+ delegate: Rectangle {
+ implicitWidth: 6
+ implicitHeight: 6
+
+ radius: width / 2
+ color: control.palette.shadow
+
+ opacity: index === currentIndex ? 0.95 : pressed ? 0.75 : 0.45
+
+ required property int index
+
+ Behavior on opacity { OpacityAnimator { duration: 100 } }
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/Pane.qml b/src/quickcontrols/fusion/Pane.qml
new file mode 100644
index 0000000000..366c2fffe0
--- /dev/null
+++ b/src/quickcontrols/fusion/Pane.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Pane {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 9
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+}
diff --git a/src/quickcontrols/fusion/Popup.qml b/src/quickcontrols/fusion/Popup.qml
new file mode 100644
index 0000000000..d669b5e758
--- /dev/null
+++ b/src/quickcontrols/fusion/Popup.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ background: Rectangle {
+ color: control.palette.window
+ border.color: control.palette.mid
+ radius: 2
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Fusion.topShadow
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Fusion.topShadow
+ }
+}
diff --git a/src/quickcontrols/fusion/ProgressBar.qml b/src/quickcontrols/fusion/ProgressBar.qml
new file mode 100644
index 0000000000..c05f1898db
--- /dev/null
+++ b/src/quickcontrols/fusion/ProgressBar.qml
@@ -0,0 +1,83 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: Item {
+ implicitWidth: 120
+ implicitHeight: 24
+ scale: control.mirrored ? -1 : 1
+
+ Rectangle {
+ height: parent.height
+ width: (control.indeterminate ? 1.0 : control.position) * parent.width
+
+ radius: 2
+ border.color: Qt.darker(Fusion.highlight(control.palette), 1.4)
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.lighter(Fusion.highlight(control.palette), 1.2)
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.highlight(control.palette)
+ }
+ }
+ }
+
+ Item {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ visible: control.indeterminate
+ clip: true
+
+ ColorImage {
+ width: Math.ceil(parent.width / implicitWidth + 1) * implicitWidth
+ height: parent.height
+
+ mirror: control.mirrored
+ fillMode: Image.TileHorizontally
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/progressmask.png"
+ color: Color.transparent(Qt.lighter(Fusion.highlight(control.palette), 1.2), 160 / 255)
+
+ visible: control.indeterminate
+ NumberAnimation on x {
+ running: control.indeterminate && control.visible
+ from: -31 // progressmask.png width
+ to: 0
+ loops: Animation.Infinite
+ duration: 750
+ }
+ }
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: 24
+
+ radius: 2
+ color: control.palette.base
+ border.color: Fusion.outline(control.palette)
+
+ Rectangle {
+ x: 1; y: 1; height: 1
+ width: parent.width - 2
+ color: Fusion.topShadow
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/RadioButton.qml b/src/quickcontrols/fusion/RadioButton.qml
new file mode 100644
index 0000000000..2553679bc4
--- /dev/null
+++ b/src/quickcontrols/fusion/RadioButton.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ indicator: RadioIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/fusion/RadioDelegate.qml b/src/quickcontrols/fusion/RadioDelegate.qml
new file mode 100644
index 0000000000..f99cf81d21
--- /dev/null
+++ b/src/quickcontrols/fusion/RadioDelegate.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ indicator: RadioIndicator {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ control: control
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 20
+ color: control.down ? Fusion.buttonColor(control.palette, false, true, true)
+ : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/fusion/RangeSlider.qml b/src/quickcontrols/fusion/RangeSlider.qml
new file mode 100644
index 0000000000..b9052c04eb
--- /dev/null
+++ b/src/quickcontrols/fusion/RangeSlider.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ Math.max(first.implicitHandleWidth,
+ second.implicitHandleWidth) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ Math.max(first.implicitHandleHeight,
+ second.implicitHandleHeight) + topPadding + bottomPadding)
+
+ first.handle: SliderHandle {
+ x: control.leftPadding + Math.round(control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
+
+ palette: control.palette
+ pressed: control.first.pressed
+ hovered: control.first.hovered
+ vertical: control.vertical
+ visualFocus: activeFocus
+ }
+
+ second.handle: SliderHandle {
+ x: control.leftPadding + Math.round(control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
+
+ palette: control.palette
+ pressed: control.second.pressed
+ hovered: control.second.hovered
+ vertical: control.vertical
+ visualFocus: activeFocus
+ }
+
+ background: SliderGroove {
+ control: control
+ offset: control.first.position
+ progress: control.second.position
+ visualProgress: control.second.visualPosition
+ }
+}
diff --git a/src/quickcontrols/fusion/RoundButton.qml b/src/quickcontrols/fusion/RoundButton.qml
new file mode 100644
index 0000000000..1952e2ccac
--- /dev/null
+++ b/src/quickcontrols/fusion/RoundButton.qml
@@ -0,0 +1,67 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.RoundButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+ visible: !control.flat || control.down || control.checked
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: control.down || control.checked
+ ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.enabled && control.hovered)
+ : Fusion.gradientStart(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.enabled && control.hovered))
+ }
+ GradientStop {
+ position: 1
+ color: control.down || control.checked
+ ? Fusion.buttonColor(control.palette, control.highlighted, control.down || control.checked, control.enabled && control.hovered)
+ : Fusion.gradientStop(Fusion.buttonColor(control.palette, control.highlighted, control.down, control.enabled && control.hovered))
+ }
+ }
+
+ radius: control.radius
+ border.color: Fusion.buttonOutline(control.palette, control.highlighted || control.visualFocus, control.enabled)
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ border.color: Fusion.innerContrastLine
+ color: "transparent"
+ radius: control.radius
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ScrollBar.qml b/src/quickcontrols/fusion/ScrollBar.qml
new file mode 100644
index 0000000000..616050df69
--- /dev/null
+++ b/src/quickcontrols/fusion/ScrollBar.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ contentItem: Rectangle {
+ implicitWidth: control.interactive ? 6 : 2
+ implicitHeight: control.interactive ? 6 : 2
+
+ radius: width / 2
+ color: control.pressed ? control.palette.dark : control.palette.mid
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ScrollIndicator.qml b/src/quickcontrols/fusion/ScrollIndicator.qml
new file mode 100644
index 0000000000..a324c049e3
--- /dev/null
+++ b/src/quickcontrols/fusion/ScrollIndicator.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+
+ contentItem: Rectangle {
+ implicitWidth: 2
+ implicitHeight: 2
+
+ color: control.palette.mid
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.active
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: [
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/fusion/ScrollView.qml b/src/quickcontrols/fusion/ScrollView.qml
new file mode 100644
index 0000000000..60789313c9
--- /dev/null
+++ b/src/quickcontrols/fusion/ScrollView.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/fusion/SelectionRectangle.qml b/src/quickcontrols/fusion/SelectionRectangle.qml
new file mode 100644
index 0000000000..762fec30c8
--- /dev/null
+++ b/src/quickcontrols/fusion/SelectionRectangle.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+
+ bottomRightHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+}
diff --git a/src/quickcontrols/fusion/Slider.qml b/src/quickcontrols/fusion/Slider.qml
new file mode 100644
index 0000000000..c78dbed468
--- /dev/null
+++ b/src/quickcontrols/fusion/Slider.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ handle: SliderHandle {
+ x: control.leftPadding + Math.round(control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + Math.round(control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
+
+ palette: control.palette
+ pressed: control.pressed
+ hovered: control.hovered
+ vertical: control.vertical
+ visualFocus: control.visualFocus
+ }
+
+ background: SliderGroove {
+ control: control
+ progress: control.position
+ visualProgress: control.visualPosition
+ }
+}
diff --git a/src/quickcontrols/fusion/SpinBox.qml b/src/quickcontrols/fusion/SpinBox.qml
new file mode 100644
index 0000000000..03fa470a32
--- /dev/null
+++ b/src/quickcontrols/fusion/SpinBox.qml
@@ -0,0 +1,148 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth + 2 * padding +
+ Math.max(up.implicitIndicatorWidth,
+ down.implicitIndicatorWidth))
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight +
+ down.implicitIndicatorHeight)
+
+ padding: 4
+ leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
+ rightPadding: padding + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ z: 2
+ text: control.displayText
+
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ }
+
+ up.indicator: PaddedRectangle {
+ x: control.mirrored ? 1 : control.width - width - 1
+ y: 1
+ height: control.height / 2 - 1
+ implicitWidth: 16
+ implicitHeight: 10
+
+ radius: 1.7
+ clip: true
+ topPadding: -2
+ leftPadding: -2
+ color: control.up.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent"
+
+ ColorImage {
+ scale: -1
+ width: parent.width
+ height: parent.height
+ opacity: enabled ? 1.0 : 0.5
+ color: control.palette.buttonText
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ fillMode: Image.Pad
+ }
+ }
+
+ down.indicator: PaddedRectangle {
+ x: control.mirrored ? 1 : control.width - width - 1
+ y: control.height - height - 1
+ height: control.height / 2 - 1
+ implicitWidth: 16
+ implicitHeight: 10
+
+ radius: 1.7
+ clip: true
+ topPadding: -2
+ leftPadding: -2
+ color: control.down.pressed ? Fusion.buttonColor(control.palette, false, true, true) : "transparent"
+
+ ColorImage {
+ width: parent.width
+ height: parent.height
+ opacity: enabled ? 1.0 : 0.5
+ color: control.palette.buttonText
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ fillMode: Image.Pad
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: 24
+
+ radius: 2
+ color: control.palette.base
+ border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette)
+
+ Rectangle {
+ x: 2
+ y: 1
+ width: parent.width - 4
+ height: 1
+ color: Fusion.topShadow
+ }
+
+ Rectangle {
+ x: control.mirrored ? 1 : parent.width - width - 1
+ y: 1
+ width: Math.max(control.up.indicator ? control.up.indicator.width : 0,
+ control.down.indicator ? control.down.indicator.width : 0) + 1
+ height: parent.height - 2
+
+ radius: 2
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Fusion.gradientStart(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered))
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.gradientStop(Fusion.buttonColor(control.palette, control.visualFocus, false, control.up.hovered || control.down.hovered))
+ }
+ }
+
+ Rectangle {
+ x: control.mirrored ? parent.width - 1 : 0
+ height: parent.height
+ width: 1
+ color: Fusion.outline(control.palette)
+ }
+ }
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ color: "transparent"
+ border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255)
+ visible: control.activeFocus
+ radius: 1.7
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/SplitView.qml b/src/quickcontrols/fusion/SplitView.qml
new file mode 100644
index 0000000000..1046d800eb
--- /dev/null
+++ b/src/quickcontrols/fusion/SplitView.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+
+T.SplitView {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: Rectangle {
+ implicitWidth: control.orientation === Qt.Horizontal ? 2 : control.width
+ implicitHeight: control.orientation === Qt.Horizontal ? control.height : 2
+ color: T.SplitHandle.pressed ? control.palette.dark
+ : (enabled && T.SplitHandle.hovered ? control.palette.midlight : control.palette.mid)
+ }
+}
diff --git a/src/quickcontrols/fusion/SwipeDelegate.qml b/src/quickcontrols/fusion/SwipeDelegate.qml
new file mode 100644
index 0000000000..1c47433bba
--- /dev/null
+++ b/src/quickcontrols/fusion/SwipeDelegate.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 20
+ color: control.down ? Fusion.buttonColor(control.palette, false, true, true)
+ : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/fusion/Switch.qml b/src/quickcontrols/fusion/Switch.qml
new file mode 100644
index 0000000000..3965b29c36
--- /dev/null
+++ b/src/quickcontrols/fusion/Switch.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/fusion/SwitchDelegate.qml b/src/quickcontrols/fusion/SwitchDelegate.qml
new file mode 100644
index 0000000000..b7c4278c71
--- /dev/null
+++ b/src/quickcontrols/fusion/SwitchDelegate.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.highlighted ? Fusion.highlightedText(control.palette) : control.palette.text
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 20
+ color: control.down ? Fusion.buttonColor(control.palette, false, true, true)
+ : control.highlighted ? Fusion.highlight(control.palette) : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/fusion/TabBar.qml b/src/quickcontrols/fusion/TabBar.qml
new file mode 100644
index 0000000000..275bcf5a2a
--- /dev/null
+++ b/src/quickcontrols/fusion/TabBar.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: -1
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 0
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 40
+ preferredHighlightEnd: width - 40
+ }
+
+ background: Item {
+ implicitHeight: 21
+
+ Rectangle {
+ width: parent.width
+ height: 1
+ y: control.position === T.TabBar.Header ? parent.height - 1 : 0
+ color: Fusion.outline(control.palette)
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/TabButton.qml b/src/quickcontrols/fusion/TabButton.qml
new file mode 100644
index 0000000000..add96a8fa3
--- /dev/null
+++ b/src/quickcontrols/fusion/TabButton.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+ horizontalPadding: 4
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ z: checked
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: Rectangle {
+ y: control.checked || control.TabBar.position !== T.TabBar.Header ? 0 : 2
+ implicitHeight: 21
+ height: control.height - (control.checked ? 0 : 2)
+
+ border.color: Qt.lighter(Fusion.outline(control.palette), 1.1)
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04)
+ : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08)
+ }
+ GradientStop {
+ position: control.checked ? 0 : 0.85
+ color: control.checked ? Qt.lighter(Fusion.tabFrameColor(control.palette), 1.04)
+ : Qt.darker(Fusion.tabFrameColor(control.palette), 1.08)
+ }
+ GradientStop {
+ position: 1
+ color: control.checked ? Fusion.tabFrameColor(control.palette)
+ : Qt.darker(Fusion.tabFrameColor(control.palette), 1.16)
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/TextArea.qml b/src/quickcontrols/fusion/TextArea.qml
new file mode 100644
index 0000000000..5e1ecfa905
--- /dev/null
+++ b/src/quickcontrols/fusion/TextArea.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ padding: 6
+ leftPadding: padding + 4
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+}
diff --git a/src/quickcontrols/fusion/TextField.qml b/src/quickcontrols/fusion/TextField.qml
new file mode 100644
index 0000000000..b358c668d8
--- /dev/null
+++ b/src/quickcontrols/fusion/TextField.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ padding: 4
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+ verticalAlignment: TextInput.AlignVCenter
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: 24
+
+ radius: 2
+ color: control.palette.base
+ border.color: control.activeFocus ? Fusion.highlightedOutline(control.palette) : Fusion.outline(control.palette)
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ color: "transparent"
+ border.color: Color.transparent(Fusion.highlightedOutline(control.palette), 40 / 255)
+ visible: control.activeFocus
+ radius: 1.7
+ }
+
+ Rectangle {
+ x: 2
+ y: 1
+ width: parent.width - 4
+ height: 1
+ color: Fusion.topShadow
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ToolBar.qml b/src/quickcontrols/fusion/ToolBar.qml
new file mode 100644
index 0000000000..13b269e9df
--- /dev/null
+++ b/src/quickcontrols/fusion/ToolBar.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ horizontalPadding: 6
+ topPadding: control.position === T.ToolBar.Footer ? 1 : 0
+ bottomPadding: control.position === T.ToolBar.Header ? 1 : 0
+
+ background: Rectangle {
+ implicitHeight: 26
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.lighter(control.palette.window, 1.04)
+ }
+ GradientStop {
+ position: 1
+ color: control.palette.window
+ }
+ }
+
+ Rectangle {
+ width: parent.width
+ height: 1
+ color: control.position === T.ToolBar.Header ? Fusion.lightShade : Fusion.darkShade
+ }
+
+ Rectangle {
+ y: parent.height - height
+ width: parent.width
+ height: 1
+ color: control.position === T.ToolBar.Header ? Fusion.darkShade : Fusion.lightShade
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ToolButton.qml b/src/quickcontrols/fusion/ToolButton.qml
new file mode 100644
index 0000000000..dd9b628261
--- /dev/null
+++ b/src/quickcontrols/fusion/ToolButton.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 16
+ icon.height: 16
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: ButtonPanel {
+ implicitWidth: 20
+ implicitHeight: 20
+
+ control: control
+ visible: control.down || control.checked || control.highlighted || control.visualFocus
+ || (enabled && control.hovered)
+ }
+}
diff --git a/src/quickcontrols/fusion/ToolSeparator.qml b/src/quickcontrols/fusion/ToolSeparator.qml
new file mode 100644
index 0000000000..569ee66ec5
--- /dev/null
+++ b/src/quickcontrols/fusion/ToolSeparator.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ToolSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: vertical ? 6 : 2
+ verticalPadding: vertical ? 2 : 6
+
+ contentItem: Rectangle {
+ implicitWidth: control.vertical ? 2 : 8
+ implicitHeight: control.vertical ? 8 : 2
+ color: Qt.darker(control.palette.window, 1.1)
+
+ Rectangle {
+ x: 1
+ width: 1
+ height: parent.height
+ color: Qt.lighter(control.palette.window, 1.1)
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/ToolTip.qml b/src/quickcontrols/fusion/ToolTip.qml
new file mode 100644
index 0000000000..5166d2b8b6
--- /dev/null
+++ b/src/quickcontrols/fusion/ToolTip.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0
+ y: -implicitHeight - 3
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 6
+ padding: 6
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ color: control.palette.toolTipText
+ }
+
+ background: Rectangle {
+ color: control.palette.toolTipBase
+ border.color: control.palette.toolTipText
+
+ Rectangle {
+ z: -1
+ x: 1; y: 1
+ width: parent.width
+ height: parent.height
+ color: control.palette.shadow
+ opacity: 0.5
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/TreeViewDelegate.qml b/src/quickcontrols/fusion/TreeViewDelegate.qml
new file mode 100644
index 0000000000..5223361872
--- /dev/null
+++ b/src/quickcontrols/fusion/TreeViewDelegate.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight)
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 5
+ rightMargin: 5
+ spacing: 5
+
+ topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
+ leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
+
+ highlighted: control.selected || control.current
+ || ((control.treeView.selectionBehavior === TableView.SelectRows
+ || control.treeView.selectionBehavior === TableView.SelectionDisabled)
+ && control.row === control.treeView.currentRow)
+
+ required property int row
+ required property var model
+ readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
+
+ indicator: Item {
+ readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
+ x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
+ y: (control.height - height) / 2
+ implicitWidth: Math.max(arrow.implicitWidth, 20)
+ implicitHeight: 24 // same as Button.qml
+
+ property ColorImage arrow : ColorImage {
+ parent: control.indicator
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 0 : (control.mirrored ? 90 : -90)
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/arrow.png"
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 24 // same as Button.qml
+ color: control.highlighted
+ ? control.palette.highlight
+ : (control.treeView.alternatingRows && control.row % 2 !== 0
+ ? control.palette.alternateBase : control.palette.base)
+ }
+
+ contentItem: Label {
+ text: control.model.display
+ elide: Text.ElideRight
+ }
+}
diff --git a/src/quickcontrols/fusion/Tumbler.qml b/src/quickcontrols/fusion/Tumbler.qml
new file mode 100644
index 0000000000..447765dce7
--- /dev/null
+++ b/src/quickcontrols/fusion/Tumbler.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+T.Tumbler {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ delegate: Text {
+ text: modelData
+ color: control.palette.windowText
+ font: control.font
+ opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property var modelData
+ required property int index
+ }
+
+ contentItem: TumblerView {
+ implicitWidth: 60
+ implicitHeight: 200
+ model: control.model
+ delegate: control.delegate
+ path: Path {
+ startX: control.contentItem.width / 2
+ startY: -control.contentItem.delegateHeight / 2
+ PathLine {
+ x: control.contentItem.width / 2
+ y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: control.availableHeight / control.visibleItemCount
+ }
+}
diff --git a/src/quickcontrols/fusion/VerticalHeaderView.qml b/src/quickcontrols/fusion/VerticalHeaderView.qml
new file mode 100644
index 0000000000..7ae2fcdd62
--- /dev/null
+++ b/src/quickcontrols/fusion/VerticalHeaderView.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.VerticalHeaderView {
+ id: control
+
+ implicitWidth: contentWidth
+ implicitHeight: syncView ? syncView.height : 0
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
+ implicitHeight: text.implicitHeight + (cellPadding * 2)
+ border.color: "#cacaca"
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: "#fbfbfb"
+ }
+ GradientStop {
+ position: 1
+ color: "#e0dfe0"
+ }
+ }
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/images/arrow.png b/src/quickcontrols/fusion/images/arrow.png
new file mode 100644
index 0000000000..97ef0238e5
--- /dev/null
+++ b/src/quickcontrols/fusion/images/arrow.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/arrow.svg b/src/quickcontrols/fusion/images/arrow.svg
new file mode 100644
index 0000000000..4438392495
--- /dev/null
+++ b/src/quickcontrols/fusion/images/arrow.svg
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="10"
+ height="6"
+ viewBox="0 0 10 6"
+ id="svg2"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/Users/jpnurmi/Downloads/arrow@4x.png"
+ inkscape:export-xdpi="360"
+ inkscape:export-ydpi="360"
+ sodipodi:docname="arrow.svg">
+ <defs
+ id="defs4" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="31.678384"
+ inkscape:cx="7.9810383"
+ inkscape:cy="3.0344775"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="true"
+ units="px"
+ inkscape:snap-to-guides="true"
+ inkscape:snap-page="true"
+ inkscape:window-width="1440"
+ inkscape:window-height="851"
+ inkscape:window-x="0"
+ inkscape:window-y="1"
+ inkscape:window-maximized="1">
+ <inkscape:grid
+ type="xygrid"
+ id="grid3336" />
+ </sodipodi:namedview>
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1046.3622)">
+ <path
+ transform="matrix(1.2371791,0,0,0.85714284,1.0769252,150.19463)"
+ style="fill:#000000;fill-opacity:0.7254902"
+ inkscape:transform-center-y="1.4999605"
+ d="m 3.1709837,1051.3622 -3.2331616,-4.6667 6.4663233,0 z"
+ id="path3365"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccc" />
+ </g>
+</svg>
diff --git a/src/quickcontrols/fusion/images/arrow@2x.png b/src/quickcontrols/fusion/images/arrow@2x.png
new file mode 100644
index 0000000000..9bfc4e6eed
--- /dev/null
+++ b/src/quickcontrols/fusion/images/arrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/arrow@3x.png b/src/quickcontrols/fusion/images/arrow@3x.png
new file mode 100644
index 0000000000..6fd9c988dc
--- /dev/null
+++ b/src/quickcontrols/fusion/images/arrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/arrow@4x.png b/src/quickcontrols/fusion/images/arrow@4x.png
new file mode 100644
index 0000000000..f5e1e66a1d
--- /dev/null
+++ b/src/quickcontrols/fusion/images/arrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/checkmark.png b/src/quickcontrols/fusion/images/checkmark.png
new file mode 100644
index 0000000000..deb30419d0
--- /dev/null
+++ b/src/quickcontrols/fusion/images/checkmark.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/checkmark.svg b/src/quickcontrols/fusion/images/checkmark.svg
new file mode 100644
index 0000000000..f1afdc4f9f
--- /dev/null
+++ b/src/quickcontrols/fusion/images/checkmark.svg
@@ -0,0 +1,72 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="14"
+ height="14"
+ viewBox="0 0 14 14"
+ id="svg3386"
+ version="1.1"
+ inkscape:version="0.91 r13725"
+ inkscape:export-filename="/Users/jpnurmi/Downloads/checkmark@4x.png"
+ inkscape:export-xdpi="360"
+ inkscape:export-ydpi="360"
+ sodipodi:docname="checkmark.svg">
+ <defs
+ id="defs3388" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="32"
+ inkscape:cx="1.9865044"
+ inkscape:cy="6.0706667"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:snap-page="true"
+ inkscape:snap-grids="true"
+ inkscape:snap-to-guides="true"
+ inkscape:window-width="1440"
+ inkscape:window-height="851"
+ inkscape:window-x="0"
+ inkscape:window-y="1"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata3391">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-1038.3622)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.79999995;stroke-linecap:butt;stroke-linejoin:bevel;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 5,1045.3622 2,4 2.5,-8"
+ id="path4198"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc"
+ inkscape:export-xdpi="90"
+ inkscape:export-ydpi="90" />
+ </g>
+</svg>
diff --git a/src/quickcontrols/fusion/images/checkmark@2x.png b/src/quickcontrols/fusion/images/checkmark@2x.png
new file mode 100644
index 0000000000..f80de0a425
--- /dev/null
+++ b/src/quickcontrols/fusion/images/checkmark@2x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/checkmark@3x.png b/src/quickcontrols/fusion/images/checkmark@3x.png
new file mode 100644
index 0000000000..c095eed18a
--- /dev/null
+++ b/src/quickcontrols/fusion/images/checkmark@3x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/checkmark@4x.png b/src/quickcontrols/fusion/images/checkmark@4x.png
new file mode 100644
index 0000000000..e58c7b4df4
--- /dev/null
+++ b/src/quickcontrols/fusion/images/checkmark@4x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/progressmask.png b/src/quickcontrols/fusion/images/progressmask.png
new file mode 100644
index 0000000000..a354377c4a
--- /dev/null
+++ b/src/quickcontrols/fusion/images/progressmask.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/progressmask.svg b/src/quickcontrols/fusion/images/progressmask.svg
new file mode 100644
index 0000000000..a0dfc4269d
--- /dev/null
+++ b/src/quickcontrols/fusion/images/progressmask.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="31"
+ height="22"
+ viewBox="0 0 8.202083 5.8208335"
+ version="1.1"
+ id="svg8"
+ inkscape:export-filename="/home/jpnurmi/Projects/qt-dev/qtquickcontrols2/src/imports/controls/fusion/images/progressmask@4x.png"
+ inkscape:export-xdpi="384"
+ inkscape:export-ydpi="384"
+ inkscape:version="0.92.1 r"
+ sodipodi:docname="progressmask.svg">
+ <defs
+ id="defs2" />
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="15.839192"
+ inkscape:cx="61.144853"
+ inkscape:cy="14.574824"
+ inkscape:document-units="mm"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ units="px"
+ inkscape:pagecheckerboard="true"
+ inkscape:window-width="3840"
+ inkscape:window-height="2031"
+ inkscape:window-x="0"
+ inkscape:window-y="55"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata5">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1"
+ transform="translate(0,-291.17915)">
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:4.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 0,296.99998 4.7625,-5.82083"
+ id="path4485"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ style="fill:none;fill-rule:evenodd;stroke:#ffffff;stroke-width:4.5;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 8.2020833,296.99998 4.7624997,-5.82083"
+ id="path4485-3"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ </g>
+</svg>
diff --git a/src/quickcontrols/fusion/images/progressmask@2x.png b/src/quickcontrols/fusion/images/progressmask@2x.png
new file mode 100644
index 0000000000..69476bf4a0
--- /dev/null
+++ b/src/quickcontrols/fusion/images/progressmask@2x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/progressmask@3x.png b/src/quickcontrols/fusion/images/progressmask@3x.png
new file mode 100644
index 0000000000..00a1c09d87
--- /dev/null
+++ b/src/quickcontrols/fusion/images/progressmask@3x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/images/progressmask@4x.png b/src/quickcontrols/fusion/images/progressmask@4x.png
new file mode 100644
index 0000000000..263110d5fe
--- /dev/null
+++ b/src/quickcontrols/fusion/images/progressmask@4x.png
Binary files differ
diff --git a/src/quickcontrols/fusion/impl/ButtonPanel.qml b/src/quickcontrols/fusion/impl/ButtonPanel.qml
new file mode 100644
index 0000000000..b7fa6a7a8e
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/ButtonPanel.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: panel
+
+ property Item control
+ property bool highlighted: control.highlighted
+
+ visible: !control.flat || control.down || control.checked
+
+ color: Fusion.buttonColor(control.palette, panel.highlighted, control.down || control.checked,
+ enabled && control.hovered)
+ gradient: control.down || control.checked ? null : buttonGradient
+
+ Gradient {
+ id: buttonGradient
+ GradientStop {
+ position: 0
+ color: Fusion.gradientStart(Fusion.buttonColor(panel.control.palette, panel.highlighted,
+ panel.control.down, panel.enabled && panel.control.hovered))
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.gradientStop(Fusion.buttonColor(panel.control.palette, panel.highlighted,
+ panel.control.down, panel.enabled && panel.control.hovered))
+ }
+ }
+
+ radius: 2
+ border.color: Fusion.buttonOutline(control.palette, panel.highlighted || control.visualFocus, control.enabled)
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ border.color: Fusion.innerContrastLine
+ color: "transparent"
+ radius: 2
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/CMakeLists.txt b/src/quickcontrols/fusion/impl/CMakeLists.txt
new file mode 100644
index 0000000000..e52f1ecc06
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/CMakeLists.txt
@@ -0,0 +1,42 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2fusionstyleimplplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "ButtonPanel.qml"
+ "CheckIndicator.qml"
+ "RadioIndicator.qml"
+ "SliderGroove.qml"
+ "SliderHandle.qml"
+ "SwitchIndicator.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2fusionstyleimplplugin
+ URI "QtQuick.Controls.Fusion.impl"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2FusionStyleImplPlugin
+ DEPENDENCIES
+ QtQuick/auto
+ PLUGIN_TARGET qtquickcontrols2fusionstyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ SOURCES
+ qquickfusionbusyindicator.cpp qquickfusionbusyindicator_p.h
+ qquickfusiondial.cpp qquickfusiondial_p.h
+ qquickfusionknob.cpp qquickfusionknob_p.h
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
diff --git a/src/quickcontrols/fusion/impl/CheckIndicator.qml b/src/quickcontrols/fusion/impl/CheckIndicator.qml
new file mode 100644
index 0000000000..58de99654a
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/CheckIndicator.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: indicator
+
+ property Item control
+ readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85)
+ readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2)
+
+ implicitWidth: 14
+ implicitHeight: 14
+
+ color: control.down ? indicator.pressedColor : control.palette.base
+ border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette)
+ : Qt.lighter(Fusion.outline(control.palette), 1.1)
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: 1
+ color: Fusion.topShadow
+ visible: indicator.control.enabled && !indicator.control.down
+ }
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ color: Color.transparent(indicator.checkMarkColor, 210 / 255)
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Fusion/images/checkmark.png"
+ visible: indicator.control.checkState === Qt.Checked || (indicator.control.checked && indicator.control.checkState === undefined)
+ }
+
+ Rectangle {
+ x: 3; y: 3
+ width: parent.width - 6
+ height: parent.width - 6
+
+ visible: indicator.control.checkState === Qt.PartiallyChecked
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Color.transparent(indicator.checkMarkColor, 80 / 255)
+ }
+ GradientStop {
+ position: 1
+ color: Color.transparent(indicator.checkMarkColor, 140 / 255)
+ }
+ }
+ border.color: Color.transparent(indicator.checkMarkColor, 180 / 255)
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/RadioIndicator.qml b/src/quickcontrols/fusion/impl/RadioIndicator.qml
new file mode 100644
index 0000000000..0949b904a9
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/RadioIndicator.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: indicator
+
+ property Item control
+ readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85)
+ readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2)
+
+ implicitWidth: 14
+ implicitHeight: 14
+
+ radius: width / 2
+ color: control.down ? indicator.pressedColor : control.palette.base
+ border.color: control.visualFocus ? Fusion.highlightedOutline(control.palette)
+ : Qt.darker(control.palette.window, 1.5)
+
+ Rectangle {
+ y: 1
+ width: parent.width
+ height: parent.height - 1
+ radius: width / 2
+ color: "transparent"
+ border.color: Fusion.topShadow
+ visible: indicator.control.enabled && !indicator.control.down
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 2.32
+ height: parent.height / 2.32
+ radius: width / 2
+ color: Color.transparent(indicator.checkMarkColor, 180 / 255)
+ border.color: Color.transparent(indicator.checkMarkColor, 200 / 255)
+ visible: indicator.control.checked
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/SliderGroove.qml b/src/quickcontrols/fusion/impl/SliderGroove.qml
new file mode 100644
index 0000000000..8cfdd836b3
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/SliderGroove.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: groove
+
+ property Item control
+ property real offset
+ property real progress
+ property real visualProgress
+
+ x: control.horizontal ? 0 : (control.availableWidth - width) / 2
+ y: control.horizontal ? (control.availableHeight - height) / 2 : 0
+
+ implicitWidth: control.horizontal ? 160 : 5
+ implicitHeight: control.horizontal ? 5 : 160
+ width: control.horizontal ? control.availableWidth : implicitWidth
+ height: control.horizontal ? implicitHeight : control.availableHeight
+
+ radius: 2
+ border.color: Fusion.outline(control.palette)
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.darker(Fusion.grooveColor(groove.control.palette), 1.1)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.lighter(Fusion.grooveColor(groove.control.palette), 1.1)
+ }
+ }
+
+ Rectangle {
+ x: groove.control.horizontal ? groove.offset * parent.width : 0
+ y: groove.control.horizontal ? 0 : groove.visualProgress * parent.height
+ width: groove.control.horizontal ? groove.progress * parent.width - groove.offset * parent.width : 5
+ height: groove.control.horizontal ? 5 : groove.progress * parent.height - groove.offset * parent.height
+
+ radius: 2
+ border.color: Qt.darker(Fusion.highlightedOutline(groove.control.palette), 1.1)
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Fusion.highlight(groove.control.palette)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.lighter(Fusion.highlight(groove.control.palette), 1.2)
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/SliderHandle.qml b/src/quickcontrols/fusion/impl/SliderHandle.qml
new file mode 100644
index 0000000000..e12d4c0bb7
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/SliderHandle.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: handle
+
+ property var palette
+ property bool pressed
+ property bool hovered
+ property bool vertical
+ property bool visualFocus
+
+ implicitWidth: 13
+ implicitHeight: 13
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Fusion.gradientStart(Fusion.buttonColor(handle.palette, handle.visualFocus,
+ handle.pressed, handle.enabled && handle.hovered))
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.gradientStop(Fusion.buttonColor(handle.palette, handle.visualFocus,
+ handle.pressed, handle.enabled && handle.hovered))
+ }
+ }
+ rotation: handle.vertical ? -90 : 0
+ border.width: 1
+ border.color: "transparent"
+ radius: 2
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ border.color: handle.visualFocus ? Fusion.highlightedOutline(handle.palette) : Fusion.outline(handle.palette)
+ color: "transparent"
+ radius: 2
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ border.color: Fusion.innerContrastLine
+ color: "transparent"
+ radius: 2
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/SwitchIndicator.qml b/src/quickcontrols/fusion/impl/SwitchIndicator.qml
new file mode 100644
index 0000000000..8bc9238228
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/SwitchIndicator.qml
@@ -0,0 +1,106 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Fusion
+import QtQuick.Controls.Fusion.impl
+
+Rectangle {
+ id: indicator
+
+ property T.AbstractButton control
+ readonly property color pressedColor: Fusion.mergedColors(control.palette.base, control.palette.windowText, 85)
+ readonly property color checkMarkColor: Qt.darker(control.palette.text, 1.2)
+
+ implicitWidth: 40
+ implicitHeight: 16
+
+ radius: 2
+ border.color: Fusion.outline(control.palette)
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Qt.darker(Fusion.grooveColor(indicator.control.palette), 1.1)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.lighter(Fusion.grooveColor(indicator.control.palette), 1.1)
+ }
+ }
+
+ Rectangle {
+ x: indicator.control.mirrored ? handle.x : 0
+ width: indicator.control.mirrored ? parent.width - handle.x : handle.x + handle.width
+ height: parent.height
+
+ opacity: indicator.control.checked ? 1 : 0
+ Behavior on opacity {
+ enabled: !indicator.control.down
+ NumberAnimation { duration: 80 }
+ }
+
+ radius: 2
+ border.color: Qt.darker(Fusion.highlightedOutline(indicator.control.palette), 1.1)
+ border.width: indicator.control.enabled ? 1 : 0
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Fusion.highlight(indicator.control.palette)
+ }
+ GradientStop {
+ position: 1
+ color: Qt.lighter(Fusion.highlight(indicator.control.palette), 1.2)
+ }
+ }
+ }
+
+ Rectangle {
+ id: handle
+ x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+ width: 20
+ height: 16
+ radius: 2
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0
+ color: Fusion.gradientStart(Fusion.buttonColor(indicator.control.palette,
+ indicator.control.visualFocus, indicator.control.pressed, indicator.enabled && indicator.control.hovered))
+ }
+ GradientStop {
+ position: 1
+ color: Fusion.gradientStop(Fusion.buttonColor(indicator.control.palette,
+ indicator.control.visualFocus, indicator.control.pressed, indicator.enabled && indicator.control.hovered))
+ }
+ }
+ border.width: 1
+ border.color: "transparent"
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ border.color: indicator.control.visualFocus ? Fusion.highlightedOutline(indicator.control.palette) : Fusion.outline(indicator.control.palette)
+ color: "transparent"
+ radius: 2
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ border.color: Fusion.innerContrastLine
+ color: "transparent"
+ radius: 2
+ }
+ }
+
+ Behavior on x {
+ enabled: !indicator.control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+}
diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp
new file mode 100644
index 0000000000..cce69b0e4b
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator.cpp
@@ -0,0 +1,80 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusionbusyindicator_p.h"
+
+#include <QtGui/qpainter.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickFusionBusyIndicator::QQuickFusionBusyIndicator(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+}
+
+QColor QQuickFusionBusyIndicator::color() const
+{
+ return m_color;
+}
+
+void QQuickFusionBusyIndicator::setColor(const QColor &color)
+{
+ if (color == m_color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+bool QQuickFusionBusyIndicator::isRunning() const
+{
+ return isVisible();
+}
+
+void QQuickFusionBusyIndicator::setRunning(bool running)
+{
+ if (running) {
+ setVisible(true);
+ update();
+ }
+}
+
+void QQuickFusionBusyIndicator::paint(QPainter *painter)
+{
+ const qreal w = width();
+ const qreal h = height();
+ if (w <= 0 || h <= 0 || !isRunning())
+ return;
+
+ const qreal sz = qMin(w, h);
+ const qreal dx = (w - sz) / 2;
+ const qreal dy = (h - sz) / 2;
+ const int hpw = qRound(qMax(qreal(1), sz / 14)) & -1;
+ const int pw = 2 * hpw;
+ const QRectF bounds(dx + hpw, dy + hpw, sz - pw - 1, sz - pw - 1);
+
+ QConicalGradient gradient;
+ gradient.setCenter(QPointF(dx + sz / 2, dy + sz / 2));
+ gradient.setColorAt(0, m_color);
+ gradient.setColorAt(0.1, m_color);
+ gradient.setColorAt(1, Qt::transparent);
+
+ painter->translate(0.5, 0.5);
+ painter->setRenderHint(QPainter::Antialiasing, true);
+ painter->setPen(QPen(gradient, pw, Qt::SolidLine));
+ painter->drawArc(bounds, 0, 360 * 16);
+ painter->setPen(QPen(m_color, pw, Qt::SolidLine, Qt::RoundCap));
+ painter->drawArc(bounds, 0, 20 * 16);
+}
+
+void QQuickFusionBusyIndicator::itemChange(ItemChange change, const ItemChangeData &data)
+{
+ QQuickPaintedItem::itemChange(change, data);
+
+ if (change == ItemOpacityHasChanged && qFuzzyIsNull(data.realValue))
+ setVisible(false);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickfusionbusyindicator_p.cpp"
diff --git a/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h
new file mode 100644
index 0000000000..22ff2af788
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusionbusyindicator_p.h
@@ -0,0 +1,52 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKFUSIONBUSYINDICATOR_P_H
+#define QQUICKFUSIONBUSYINDICATOR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickpainteditem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickFusionBusyIndicator : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(bool running READ isRunning WRITE setRunning)
+ QML_NAMED_ELEMENT(BusyIndicatorImpl)
+ QML_ADDED_IN_VERSION(2, 3)
+
+public:
+ explicit QQuickFusionBusyIndicator(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ bool isRunning() const;
+ void setRunning(bool running);
+
+ void paint(QPainter *painter) override;
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+
+private:
+ QColor m_color;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKFUSIONBUSYINDICATOR_P_H
diff --git a/src/quickcontrols/fusion/impl/qquickfusiondial.cpp b/src/quickcontrols/fusion/impl/qquickfusiondial.cpp
new file mode 100644
index 0000000000..99b022726c
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusiondial.cpp
@@ -0,0 +1,108 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusiondial_p.h"
+
+#include <QtGui/qpainter.h>
+#include <QtGui/private/qmath_p.h>
+#include <QtQuick/private/qquickpalette_p.h>
+#include <QtQuick/private/qquickitem_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickFusionDial::QQuickFusionDial(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+}
+
+bool QQuickFusionDial::highlight() const
+{
+ return m_highlight;
+}
+
+void QQuickFusionDial::setHighlight(bool highlight)
+{
+ if (m_highlight == highlight)
+ return;
+
+ m_highlight = highlight;
+ update();
+}
+
+// based on QStyleHelper::drawDial()
+void QQuickFusionDial::paint(QPainter *painter)
+{
+ const int width = QQuickItem::width();
+ const int height = QQuickItem::height();
+ if (width <= 0 || height <= 0 || !isVisible())
+ return;
+
+ const bool enabled = isEnabled();
+ qreal r = qMin(width, height) / 2.0;
+ r -= r/50;
+ const qreal penSize = r/20.0;
+
+ painter->setRenderHint(QPainter::Antialiasing);
+
+ const qreal d_ = r / 6;
+ const qreal dx = d_ + (width - 2 * r) / 2 + 1;
+ const qreal dy = d_ + (height - 2 * r) / 2 + 1;
+
+ QRectF br = QRectF(dx + 0.5, dy + 0.5,
+ int(r * 2 - 2 * d_ - 2),
+ int(r * 2 - 2 * d_ - 2));
+ QColor buttonColor = QQuickItemPrivate::get(this)->palette()->button().toHsv();
+ buttonColor.setHsv(buttonColor .hue(),
+ qMin(140, buttonColor .saturation()),
+ qMax(180, buttonColor.value()));
+
+ if (enabled) {
+ // Drop shadow
+ qreal shadowSize = qMax(1.0, penSize/2.0);
+ QRectF shadowRect= br.adjusted(-2*shadowSize, -2*shadowSize,
+ 2*shadowSize, 2*shadowSize);
+ QRadialGradient shadowGradient(shadowRect.center().x(),
+ shadowRect.center().y(), shadowRect.width()/2.0,
+ shadowRect.center().x(), shadowRect.center().y());
+ shadowGradient.setColorAt(qreal(0.91), QColor(0, 0, 0, 40));
+ shadowGradient.setColorAt(qreal(1.0), Qt::transparent);
+ painter->setBrush(shadowGradient);
+ painter->setPen(Qt::NoPen);
+ painter->translate(shadowSize, shadowSize);
+ painter->drawEllipse(shadowRect);
+ painter->translate(-shadowSize, -shadowSize);
+
+ // Main gradient
+ QRadialGradient gradient(br.center().x() - br.width()/3, dy,
+ br.width()*1.3, br.center().x(),
+ br.center().y() - br.height()/2);
+ gradient.setColorAt(0, buttonColor.lighter(110));
+ gradient.setColorAt(qreal(0.5), buttonColor);
+ gradient.setColorAt(qreal(0.501), buttonColor.darker(102));
+ gradient.setColorAt(1, buttonColor.darker(115));
+ painter->setBrush(gradient);
+ } else {
+ painter->setBrush(Qt::NoBrush);
+ }
+
+ painter->setPen(QPen(buttonColor.darker(280)));
+ painter->drawEllipse(br);
+ painter->setBrush(Qt::NoBrush);
+ painter->setPen(buttonColor.lighter(110));
+ painter->drawEllipse(br.adjusted(1, 1, -1, -1));
+
+ if (m_highlight) {
+ QColor highlight = QQuickItemPrivate::get(this)->palette()->highlight().toHsv();
+ highlight.setHsv(highlight.hue(),
+ qMin(160, highlight.saturation()),
+ qMax(230, highlight.value()));
+ highlight.setAlpha(127);
+ painter->setPen(QPen(highlight, 2.0));
+ painter->setBrush(Qt::NoBrush);
+ painter->drawEllipse(br.adjusted(-1, -1, 1, 1));
+ }
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickfusiondial_p.cpp"
diff --git a/src/quickcontrols/fusion/impl/qquickfusiondial_p.h b/src/quickcontrols/fusion/impl/qquickfusiondial_p.h
new file mode 100644
index 0000000000..3167c81515
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusiondial_p.h
@@ -0,0 +1,44 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKFUSIONDIAL_P_H
+#define QQUICKFUSIONDIAL_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickpainteditem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickFusionDial : public QQuickPaintedItem
+{
+ Q_OBJECT
+ Q_PROPERTY(bool highlight READ highlight WRITE setHighlight FINAL)
+ QML_NAMED_ELEMENT(DialImpl)
+ QML_ADDED_IN_VERSION(2, 3)
+
+public:
+ explicit QQuickFusionDial(QQuickItem *parent = nullptr);
+
+ bool highlight() const;
+ void setHighlight(bool highlight);
+
+ void paint(QPainter *painter) override;
+
+private:
+ bool m_highlight = false;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKFUSIONDIAL_P_H
diff --git a/src/quickcontrols/fusion/impl/qquickfusionknob.cpp b/src/quickcontrols/fusion/impl/qquickfusionknob.cpp
new file mode 100644
index 0000000000..00be4bd759
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusionknob.cpp
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusionknob_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtGui/qpainter.h>
+#include <QtQuick/private/qquickpalette_p.h>
+#include <QtQuick/private/qquickitem_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickFusionKnob::QQuickFusionKnob(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+ connect(this, &QQuickItem::paletteChanged, this, [this](){ update(); });
+}
+
+// extracted from QStyleHelper::drawDial()
+void QQuickFusionKnob::paint(QPainter *painter)
+{
+ const qreal w = width();
+ const qreal h = height();
+ if (w <= 0 || h <= 0)
+ return;
+
+ QColor color = QQuickItemPrivate::get(this)->palette()->button().toHsv();
+ color.setHsv(color.hue(),
+ qMin(140, color .saturation()),
+ qMax(180, color.value()));
+ color = color.lighter(104);
+ color.setAlphaF(0.8f);
+
+ const qreal sz = qMin(w, h);
+ QRectF rect(0, 0, sz, sz);
+ rect.moveCenter(QPointF(w / 2.0, h / 2.0));
+ const QPointF center = rect.center();
+
+ QRadialGradient gradient(center.x() + rect.width() / 2,
+ center.y() + rect.width(),
+ rect.width() * 2,
+ center.x(), center.y());
+ gradient.setColorAt(1, color.darker(140));
+ gradient.setColorAt(qreal(0.4), color.darker(120));
+ gradient.setColorAt(0, color.darker(110));
+
+ painter->setRenderHint(QPainter::Antialiasing);
+ painter->setBrush(gradient);
+ painter->setPen(QColor(255, 255, 255, 150));
+ painter->drawEllipse(rect);
+ painter->setPen(QColor(0, 0, 0, 80));
+ painter->drawEllipse(rect.adjusted(1, 1, -1, -1));
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickfusionknob_p.cpp"
diff --git a/src/quickcontrols/fusion/impl/qquickfusionknob_p.h b/src/quickcontrols/fusion/impl/qquickfusionknob_p.h
new file mode 100644
index 0000000000..909aa4ffc6
--- /dev/null
+++ b/src/quickcontrols/fusion/impl/qquickfusionknob_p.h
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKFUSIONKNOB_P_H
+#define QQUICKFUSIONKNOB_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickpainteditem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickFusionKnob : public QQuickPaintedItem
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(KnobImpl)
+ QML_ADDED_IN_VERSION(2, 3)
+
+public:
+ explicit QQuickFusionKnob(QQuickItem *parent = nullptr);
+
+ void paint(QPainter *painter) override;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKFUSIONKNOB_P_H
diff --git a/src/quickcontrols/fusion/qquickfusionstyle.cpp b/src/quickcontrols/fusion/qquickfusionstyle.cpp
new file mode 100644
index 0000000000..fec1a674bf
--- /dev/null
+++ b/src/quickcontrols/fusion/qquickfusionstyle.cpp
@@ -0,0 +1,122 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusionstyle_p.h"
+
+#include <QtGui/qcolor.h>
+#include <QtGui/qpalette.h>
+#include <QtGui/qpa/qplatformtheme.h>
+#include <QtGui/private/qguiapplication_p.h>
+
+#include <QtQuick/private/qquickpalette_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickFusionStyle::QQuickFusionStyle(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QColor QQuickFusionStyle::lightShade()
+{
+ return QColor(255, 255, 255, 90);
+}
+
+QColor QQuickFusionStyle::darkShade()
+{
+ return QColor(0, 0, 0, 60);
+}
+
+QColor QQuickFusionStyle::topShadow()
+{
+ return QColor(0, 0, 0, 18);
+}
+
+QColor QQuickFusionStyle::innerContrastLine()
+{
+ return QColor(255, 255, 255, 30);
+}
+
+QColor QQuickFusionStyle::highlight(QQuickPalette *palette)
+{
+ return palette->highlight();
+}
+
+QColor QQuickFusionStyle::highlightedText(QQuickPalette *palette)
+{
+ return palette->highlightedText();
+}
+
+QColor QQuickFusionStyle::outline(QQuickPalette *palette)
+{
+ return palette->window().darker(140);
+}
+
+QColor QQuickFusionStyle::highlightedOutline(QQuickPalette *palette)
+{
+ QColor highlightedOutline = highlight(palette).darker(125).toHsv();
+ if (highlightedOutline.value() > 160)
+ highlightedOutline.setHsl(highlightedOutline.hue(), highlightedOutline.saturation(), 160);
+ return highlightedOutline;
+}
+
+QColor QQuickFusionStyle::tabFrameColor(QQuickPalette *palette)
+{
+ return buttonColor(palette).lighter(104);
+}
+
+QColor QQuickFusionStyle::buttonColor(QQuickPalette *palette, bool highlighted, bool down, bool hovered)
+{
+ QColor buttonColor = palette->button();
+ int val = qGray(buttonColor.rgb());
+ buttonColor = buttonColor.lighter(100 + qMax(1, (180 - val)/6));
+ buttonColor = buttonColor.toHsv();
+ buttonColor.setHsv(buttonColor.hue(), int(buttonColor.saturation() * 0.75), buttonColor.value());
+ if (highlighted)
+ buttonColor = mergedColors(buttonColor, highlightedOutline(palette).lighter(130), 90);
+ if (!hovered)
+ buttonColor = buttonColor.darker(104);
+ if (down)
+ buttonColor = buttonColor.darker(110);
+ return buttonColor;
+}
+
+QColor QQuickFusionStyle::buttonOutline(QQuickPalette *palette, bool highlighted, bool enabled)
+{
+ QColor darkOutline = enabled && highlighted ? highlightedOutline(palette) : outline(palette);
+ return !enabled ? darkOutline.lighter(115) : darkOutline;
+}
+
+QColor QQuickFusionStyle::gradientStart(const QColor &baseColor)
+{
+ return baseColor.lighter(124);
+}
+
+QColor QQuickFusionStyle::gradientStop(const QColor &baseColor)
+{
+ return baseColor.lighter(102);
+}
+
+QColor QQuickFusionStyle::mergedColors(const QColor &colorA, const QColor &colorB, int factor)
+{
+ const int maxFactor = 100;
+ const auto rgbColorB = colorB.toRgb();
+ QColor tmp = colorA.toRgb();
+ tmp.setRed((tmp.red() * factor) / maxFactor + (rgbColorB.red() * (maxFactor - factor)) / maxFactor);
+ tmp.setGreen((tmp.green() * factor) / maxFactor + (rgbColorB.green() * (maxFactor - factor)) / maxFactor);
+ tmp.setBlue((tmp.blue() * factor) / maxFactor + (rgbColorB.blue() * (maxFactor - factor)) / maxFactor);
+ return tmp;
+}
+
+QColor QQuickFusionStyle::grooveColor(QQuickPalette *palette)
+{
+ QColor color = buttonColor(palette).toHsv();
+ color.setHsv(color.hue(),
+ qMin(255, color.saturation()),
+ qMin<int>(255, color.value() * 0.9));
+ return color;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickfusionstyle_p.cpp"
diff --git a/src/quickcontrols/fusion/qquickfusionstyle_p.h b/src/quickcontrols/fusion/qquickfusionstyle_p.h
new file mode 100644
index 0000000000..a264201211
--- /dev/null
+++ b/src/quickcontrols/fusion/qquickfusionstyle_p.h
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKFUSIONSTYLE_P_H
+#define QQUICKFUSIONSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include <QtGui/qcolor.h>
+#include <QtQml/qqml.h>
+#include <QtQuick/private/qquickpalette_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickFusionStyle : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor lightShade READ lightShade CONSTANT)
+ Q_PROPERTY(QColor darkShade READ darkShade CONSTANT)
+ Q_PROPERTY(QColor topShadow READ topShadow CONSTANT)
+ Q_PROPERTY(QColor innerContrastLine READ innerContrastLine CONSTANT)
+ QML_NAMED_ELEMENT(Fusion)
+ QML_SINGLETON
+ QML_ADDED_IN_VERSION(2, 3)
+
+public:
+ explicit QQuickFusionStyle(QObject *parent = nullptr);
+
+ static QColor lightShade();
+ static QColor darkShade();
+ static QColor topShadow();
+ static QColor innerContrastLine();
+
+ Q_INVOKABLE static QColor highlight(QQuickPalette *palette);
+ Q_INVOKABLE static QColor highlightedText(QQuickPalette *palette);
+ Q_INVOKABLE static QColor outline(QQuickPalette *palette);
+ Q_INVOKABLE static QColor highlightedOutline(QQuickPalette *palette);
+ Q_INVOKABLE static QColor tabFrameColor(QQuickPalette *palette);
+ Q_INVOKABLE static QColor buttonColor(QQuickPalette *palette, bool highlighted = false, bool down = false, bool hovered = false);
+ Q_INVOKABLE static QColor buttonOutline(QQuickPalette *palette, bool highlighted = false, bool enabled = true);
+ Q_INVOKABLE static QColor gradientStart(const QColor &baseColor);
+ Q_INVOKABLE static QColor gradientStop(const QColor &baseColor);
+ Q_INVOKABLE static QColor mergedColors(const QColor &colorA, const QColor &colorB, int factor = 50);
+ Q_INVOKABLE static QColor grooveColor(QQuickPalette *palette);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKFUSIONSTYLE_P_H
diff --git a/src/quickcontrols/fusion/qquickfusiontheme.cpp b/src/quickcontrols/fusion/qquickfusiontheme.cpp
new file mode 100644
index 0000000000..335d3be73f
--- /dev/null
+++ b/src/quickcontrols/fusion/qquickfusiontheme.cpp
@@ -0,0 +1,18 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusiontheme_p.h"
+
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern QPalette qt_fusionPalette();
+
+void QQuickFusionTheme::initialize(QQuickTheme *theme)
+{
+ theme->setPalette(QQuickTheme::System, qt_fusionPalette());
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/fusion/qquickfusiontheme_p.h b/src/quickcontrols/fusion/qquickfusiontheme_p.h
new file mode 100644
index 0000000000..a41c9d7315
--- /dev/null
+++ b/src/quickcontrols/fusion/qquickfusiontheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKFUSIONTHEME_P_H
+#define QQUICKFUSIONTHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickFusionTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKFUSIONTHEME_P_H
diff --git a/src/quickcontrols/fusion/qtquickcontrols2fusionstyleplugin.cpp b/src/quickcontrols/fusion/qtquickcontrols2fusionstyleplugin.cpp
new file mode 100644
index 0000000000..532d7597ce
--- /dev/null
+++ b/src/quickcontrols/fusion/qtquickcontrols2fusionstyleplugin.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickfusionstyle_p.h"
+#include "qquickfusiontheme_p.h"
+
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Fusion();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Fusion);
+
+class QtQuickControls2FusionStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2FusionStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+
+ QQuickFusionTheme theme;
+};
+
+QtQuickControls2FusionStylePlugin::QtQuickControls2FusionStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Fusion;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2FusionStylePlugin::name() const
+{
+ return QStringLiteral("Fusion");
+}
+
+void QtQuickControls2FusionStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ this->theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2fusionstyleplugin.moc"
diff --git a/src/quickcontrols/imagine/ApplicationWindow.qml b/src/quickcontrols/imagine/ApplicationWindow.qml
new file mode 100644
index 0000000000..c0ea1037c1
--- /dev/null
+++ b/src/quickcontrols/imagine/ApplicationWindow.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ApplicationWindow {
+ id: window
+
+ background: NinePatchImage {
+ width: window.width
+ height: window.height
+
+ source: Imagine.url + "applicationwindow-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"active": window.active}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/BusyIndicator.qml b/src/quickcontrols/imagine/BusyIndicator.qml
new file mode 100644
index 0000000000..6dc40dc4be
--- /dev/null
+++ b/src/quickcontrols/imagine/BusyIndicator.qml
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.BusyIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: AnimatedImage {
+ opacity: control.running ? 1 : 0
+ playing: control.running || opacity > 0
+ visible: control.running || opacity > 0
+ Behavior on opacity { OpacityAnimator { duration: 250 } }
+
+ source: Imagine.url + "busyindicator-animation"
+ AnimatedImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"running": control.running},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "busyindicator-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"running": control.running},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Button.qml b/src/quickcontrols/imagine/Button.qml
new file mode 100644
index 0000000000..6526909587
--- /dev/null
+++ b/src/quickcontrols/imagine/Button.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight
+ : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat
+ ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled && control.flat && control.highlighted ? control.palette.highlight
+ : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat
+ ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "button-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"checkable": control.checkable},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"flat": control.flat},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/CMakeLists.txt b/src/quickcontrols/imagine/CMakeLists.txt
new file mode 100644
index 0000000000..e4a164add2
--- /dev/null
+++ b/src/quickcontrols/imagine/CMakeLists.txt
@@ -0,0 +1,148 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2imaginestyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "ApplicationWindow.qml"
+ "BusyIndicator.qml"
+ "Button.qml"
+ "CheckBox.qml"
+ "CheckDelegate.qml"
+ "ComboBox.qml"
+ "DelayButton.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+ "Drawer.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "HorizontalHeaderView.qml"
+ "ItemDelegate.qml"
+ "Label.qml"
+ "Menu.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+ "PageIndicator.qml"
+ "Page.qml"
+ "Pane.qml"
+ "Popup.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "RadioDelegate.qml"
+ "RangeSlider.qml"
+ "RoundButton.qml"
+ "ScrollView.qml"
+ "ScrollBar.qml"
+ "ScrollIndicator.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "SplitView.qml"
+ "StackView.qml"
+ "SwipeDelegate.qml"
+ "SwipeView.qml"
+ "Switch.qml"
+ "SwitchDelegate.qml"
+ "TextField.qml"
+ "TextArea.qml"
+ "TabBar.qml"
+ "TabButton.qml"
+ "ToolBar.qml"
+ "ToolButton.qml"
+ "ToolSeparator.qml"
+ "ToolTip.qml"
+ "Tumbler.qml"
+ "VerticalHeaderView.qml"
+)
+set_source_files_properties(DelayButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(Dialog.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(DialogButtonBox.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(HorizontalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+set_source_files_properties(MenuSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(RoundButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(SplitView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.13;6.0"
+)
+set_source_files_properties(ToolSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(VerticalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2imaginestyleplugin
+ URI "QtQuick.Controls.Imagine"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2ImagineStylePlugin
+ IMPORTS
+ QtQuick.Controls.Basic/auto
+ PLUGIN_TARGET qtquickcontrols2imaginestyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickimaginestyle.cpp qquickimaginestyle_p.h
+ qquickimaginetheme.cpp qquickimaginetheme_p.h
+ qtquickcontrols2imaginestyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+file(GLOB resource_glob_0 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png")
+foreach(file IN LISTS resource_glob_0)
+ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
+endforeach()
+
+file(GLOB resource_glob_1 RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.webp")
+foreach(file IN LISTS resource_glob_1)
+ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
+endforeach()
+
+# Resources:
+set(qmake_qtquickcontrols2imaginestyleplugin_resource_files
+ ${resource_glob_0}
+ ${resource_glob_1}
+)
+
+qt_internal_add_resource(qtquickcontrols2imaginestyleplugin "qmake_qtquickcontrols2imaginestyleplugin"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/Imagine"
+ FILES
+ ${qmake_qtquickcontrols2imaginestyleplugin_resource_files}
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2imaginestyleplugin quickwindow)
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2imaginestyleplugin
+ qtquickcontrols2imaginestyleimplplugin)
+
+# Basic style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2imaginestyleplugin
+ qtquickcontrols2basicstyleplugin)
diff --git a/src/quickcontrols/imagine/CheckBox.qml b/src/quickcontrols/imagine/CheckBox.qml
new file mode 100644
index 0000000000..11a2048e6f
--- /dev/null
+++ b/src/quickcontrols/imagine/CheckBox.qml
@@ -0,0 +1,73 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ source: Imagine.url + "checkbox-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "checkbox-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/CheckDelegate.qml b/src/quickcontrols/imagine/CheckDelegate.qml
new file mode 100644
index 0000000000..ccae3c1b9f
--- /dev/null
+++ b/src/quickcontrols/imagine/CheckDelegate.qml
@@ -0,0 +1,84 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.CheckDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ indicator: Image {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ source: Imagine.url + "checkdelegate-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "checkdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ComboBox.qml b/src/quickcontrols/imagine/ComboBox.qml
new file mode 100644
index 0000000000..254313454c
--- /dev/null
+++ b/src/quickcontrols/imagine/ComboBox.qml
@@ -0,0 +1,139 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ComboBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + (background ? background.leftPadding + background.rightPadding : 0))
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ Math.max(implicitContentHeight,
+ implicitIndicatorHeight) + (background ? background.topPadding + background.bottomPadding : 0))
+
+ leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+ rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ indicator: Image {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ source: Imagine.url + "combobox-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"editable": control.editable},
+ {"open": control.down},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered},
+ {"flat": control.flat}
+ ]
+ }
+ }
+
+ contentItem: T.TextField {
+ topPadding: control.background ? control.background.topPadding : 0
+ leftPadding: control.background ? control.background.leftPadding : 0
+ rightPadding: control.background ? control.background.rightPadding : 0
+ bottomPadding: control.background ? control.background.bottomPadding : 0
+
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.flat ? control.palette.windowText : control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "combobox-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"editable": control.editable},
+ {"open": control.down},
+ {"focused": control.visualFocus || (control.editable && control.activeFocus)},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered},
+ {"flat": control.flat}
+ ]
+ }
+ }
+
+ popup: T.Popup {
+ width: control.width
+ height: Math.min(contentItem.implicitHeight + topPadding + bottomPadding, control.Window.height - topMargin - bottomMargin)
+
+ topMargin: background.topInset
+ bottomMargin: background.bottomInset
+
+ topPadding: background.topPadding
+ leftPadding: background.leftPadding
+ rightPadding: background.rightPadding
+ bottomPadding: background.bottomPadding
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ palette.text: control.palette.text
+ palette.highlight: control.palette.highlight
+ palette.highlightedText: control.palette.highlightedText
+ palette.windowText: control.palette.windowText
+ palette.buttonText: control.palette.buttonText
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "combobox-popup"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"editable": control.editable},
+ {"focused": control.visualFocus || (control.editable && control.activeFocus)},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered},
+ {"flat": control.flat}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/DelayButton.qml b/src/quickcontrols/imagine/DelayButton.qml
new file mode 100644
index 0000000000..73854cdd33
--- /dev/null
+++ b/src/quickcontrols/imagine/DelayButton.qml
@@ -0,0 +1,104 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.DelayButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ transition: Transition {
+ NumberAnimation {
+ duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ background: NinePatchImage {
+ source: control.Imagine.url + "delaybutton-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ readonly property NinePatchImage progress: NinePatchImage {
+ parent: control.background
+ width: control.progress * parent.width
+ height: parent.height
+ visible: false
+
+ source: control.Imagine.url + "delaybutton-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ readonly property NinePatchImage mask: NinePatchImage {
+ width: control.background.width
+ height: control.background.height
+ visible: false
+
+ source: control.Imagine.url + "delaybutton-mask"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ readonly property OpacityMask effect: OpacityMask {
+ parent: control.background
+ width: source.width
+ height: source.height
+ source: control.background.progress
+
+ maskSource: ShaderEffectSource {
+ sourceItem: control.background.mask
+ sourceRect: Qt.rect(0, 0, control.background.effect.width, control.background.effect.height)
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Dial.qml b/src/quickcontrols/imagine/Dial.qml
new file mode 100644
index 0000000000..85eb0a8422
--- /dev/null
+++ b/src/quickcontrols/imagine/Dial.qml
@@ -0,0 +1,67 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ (handle ? handle.implicitWidth : 0) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ (handle ? handle.implicitHeight : 0) + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ handle: Image {
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+
+ source: Imagine.url + "dial-handle"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ transform: [
+ Translate {
+ y: -Math.min(control.background.width, control.background.height) * 0.4 + control.handle.height / 2
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: control.handle.width / 2
+ origin.y: control.handle.height / 2
+ }
+ ]
+ }
+
+ background: NinePatchImage {
+ fillMode: Image.PreserveAspectFit
+ source: Imagine.url + "dial-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Dialog.qml b/src/quickcontrols/imagine/Dialog.qml
new file mode 100644
index 0000000000..4d3c29633e
--- /dev/null
+++ b/src/quickcontrols/imagine/Dialog.qml
@@ -0,0 +1,83 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialog-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ padding: 12
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "dialog-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "dialog-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/DialogButtonBox.qml b/src/quickcontrols/imagine/DialogButtonBox.qml
new file mode 100644
index 0000000000..81d87b65df
--- /dev/null
+++ b/src/quickcontrols/imagine/DialogButtonBox.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ (control.count === 1 ? contentWidth * 2 : contentWidth) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ spacing: 6
+
+ delegate: Button {
+ width: control.count === 1 ? control.availableWidth / 2 : undefined
+ flat: true
+ }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "dialogbuttonbox-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Drawer.qml b/src/quickcontrols/imagine/Drawer.qml
new file mode 100644
index 0000000000..b6ecbb2b20
--- /dev/null
+++ b/src/quickcontrols/imagine/Drawer.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ background: NinePatchImage {
+ source: Imagine.url + "drawer-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim},
+ {"top": control.edge === Qt.TopEdge},
+ {"left": control.edge === Qt.LeftEdge},
+ {"right": control.edge === Qt.RightEdge},
+ {"bottom": control.edge === Qt.BottomEdge}
+ ]
+ }
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "drawer-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "drawer-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Frame.qml b/src/quickcontrols/imagine/Frame.qml
new file mode 100644
index 0000000000..a3076171f5
--- /dev/null
+++ b/src/quickcontrols/imagine/Frame.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "frame-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/GroupBox.qml b/src/quickcontrols/imagine/GroupBox.qml
new file mode 100644
index 0000000000..e833a92da1
--- /dev/null
+++ b/src/quickcontrols/imagine/GroupBox.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: ((background as NinePatchImage)?.topPadding ?? 0) + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+ leftPadding: ((background as NinePatchImage)?.leftPadding ?? 0)
+ rightPadding: ((background as NinePatchImage)?.rightPadding ?? 0)
+ bottomPadding: ((background as NinePatchImage)?.bottomPadding ?? 0)
+
+ label: Label {
+ width: control.width
+
+ topPadding: background.topPadding
+ leftPadding: background.leftPadding
+ rightPadding: background.rightPadding
+ bottomPadding: background.bottomPadding
+
+ text: control.title
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ color: control.palette.windowText
+
+ background: NinePatchImage {
+ width: parent.width
+ height: parent.height
+
+ source: Imagine.url + "groupbox-title"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+ }
+
+ background: NinePatchImage {
+ x: -leftInset
+ y: control.topPadding - control.bottomPadding - topInset
+ width: control.width + leftInset + rightInset
+ height: control.height + topInset + bottomInset - control.topPadding + control.bottomPadding
+
+ source: Imagine.url + "groupbox-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/HorizontalHeaderView.qml b/src/quickcontrols/imagine/HorizontalHeaderView.qml
new file mode 100644
index 0000000000..140c9f3ae8
--- /dev/null
+++ b/src/quickcontrols/imagine/HorizontalHeaderView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.HorizontalHeaderView {
+ id: control
+
+ implicitWidth: syncView ? syncView.width : 0
+ implicitHeight: contentHeight
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: text.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
+ color: "#f6f6f6"
+ border.color: "#e4e4e4"
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ItemDelegate.qml b/src/quickcontrols/imagine/ItemDelegate.qml
new file mode 100644
index 0000000000..2a2b0bd796
--- /dev/null
+++ b/src/quickcontrols/imagine/ItemDelegate.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Label.qml b/src/quickcontrols/imagine/Label.qml
new file mode 100644
index 0000000000..9a612bcd35
--- /dev/null
+++ b/src/quickcontrols/imagine/Label.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Label {
+ id: control
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ color: control.palette.windowText
+ linkColor: control.palette.link
+
+ background: NinePatchImage {
+ source: Imagine.url + "label-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Menu.qml b/src/quickcontrols/imagine/Menu.qml
new file mode 100644
index 0000000000..6c58ea7290
--- /dev/null
+++ b/src/quickcontrols/imagine/Menu.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+import QtQuick.Window
+
+T.Menu {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topMargin: background ? background.topInset : 0
+ leftMargin: background ? background.leftInset : 0
+ rightMargin: background ? background.rightInset : 0
+ bottomMargin: background ? background.bottomInset : 0
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ delegate: MenuItem { }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "menu-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "menu-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "menu-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/MenuItem.qml b/src/quickcontrols/imagine/MenuItem.qml
new file mode 100644
index 0000000000..5d8809d61a
--- /dev/null
+++ b/src/quickcontrols/imagine/MenuItem.qml
@@ -0,0 +1,104 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.windowText
+
+ contentItem: IconLabel {
+ readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
+ readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
+ rightPadding: control.mirrored ? indicatorPadding : arrowPadding
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+
+ arrow: Image {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.subMenu
+ source: Imagine.url + "menuitem-arrow"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.checkable
+ source: Imagine.url + "menuitem-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "menuitem-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/MenuSeparator.qml b/src/quickcontrols/imagine/MenuSeparator.qml
new file mode 100644
index 0000000000..0ed3504dca
--- /dev/null
+++ b/src/quickcontrols/imagine/MenuSeparator.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: NinePatchImage {
+ source: Imagine.url + "menuseparator-separator"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "menuseparator-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Page.qml b/src/quickcontrols/imagine/Page.qml
new file mode 100644
index 0000000000..9e32db27b7
--- /dev/null
+++ b/src/quickcontrols/imagine/Page.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Page {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "page-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/PageIndicator.qml b/src/quickcontrols/imagine/PageIndicator.qml
new file mode 100644
index 0000000000..42afbda70a
--- /dev/null
+++ b/src/quickcontrols/imagine/PageIndicator.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ delegate: Image {
+ source: Imagine.url + "pageindicator-delegate"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": pressed},
+ {"current": index === control.currentIndex},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered} // ### TODO: context property
+ ]
+ }
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "pageindicator-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Pane.qml b/src/quickcontrols/imagine/Pane.qml
new file mode 100644
index 0000000000..f74ea96d23
--- /dev/null
+++ b/src/quickcontrols/imagine/Pane.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Pane {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "pane-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Popup.qml b/src/quickcontrols/imagine/Popup.qml
new file mode 100644
index 0000000000..185f2fabaf
--- /dev/null
+++ b/src/quickcontrols/imagine/Popup.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : undefined
+ leftPadding: background ? background.leftPadding : undefined
+ rightPadding: background ? background.rightPadding : undefined
+ bottomPadding: background ? background.bottomPadding : undefined
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "popup-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": control.modal},
+ {"dim": control.dim}
+ ]
+ }
+ }
+
+ T.Overlay.modal: NinePatchImage {
+ source: Imagine.url + "popup-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": true}
+ ]
+ }
+ }
+
+ T.Overlay.modeless: NinePatchImage {
+ source: Imagine.url + "popup-overlay"
+ NinePatchImageSelector on source {
+ states: [
+ {"modal": false}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ProgressBar.qml b/src/quickcontrols/imagine/ProgressBar.qml
new file mode 100644
index 0000000000..641320fab3
--- /dev/null
+++ b/src/quickcontrols/imagine/ProgressBar.qml
@@ -0,0 +1,108 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: Item {
+ implicitWidth: control.indeterminate ? animation.implicitWidth || progress.implicitWidth : progress.implicitWidth
+ implicitHeight: control.indeterminate ? animation.implicitHeight || progress.implicitHeight : progress.implicitHeight
+ scale: control.mirrored ? -1 : 1
+
+ readonly property bool hasMask: mask.status !== Image.Null
+
+ readonly property NinePatchImage progress: NinePatchImage {
+ parent: control.contentItem
+ width: control.position * parent.width
+ height: parent.height
+ visible: !control.indeterminate && !control.contentItem.hasMask
+
+ source: Imagine.url + "progressbar-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"indeterminate": control.indeterminate},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ readonly property AnimatedImage animation: AnimatedImage {
+ parent: control.contentItem
+ width: parent.width
+ height: parent.height
+ playing: control.indeterminate
+ visible: control.indeterminate && !control.contentItem.hasMask
+
+ source: Imagine.url + "progressbar-animation"
+ AnimatedImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ readonly property NinePatchImage mask: NinePatchImage {
+ width: control.availableWidth
+ height: control.availableHeight
+ visible: false
+
+ source: Imagine.url + "progressbar-mask"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"indeterminate": control.indeterminate},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ readonly property OpacityMask effect: OpacityMask {
+ parent: control.contentItem
+ width: source.width
+ height: source.height
+ source: control.indeterminate ? control.contentItem.animation : control.contentItem.progress
+
+ maskSource: ShaderEffectSource {
+ sourceItem: control.contentItem.mask
+ sourceRect: Qt.rect(0, 0, control.contentItem.effect.width, control.contentItem.effect.height)
+ }
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "progressbar-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"indeterminate": control.indeterminate},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/RadioButton.qml b/src/quickcontrols/imagine/RadioButton.qml
new file mode 100644
index 0000000000..2f9335eb7c
--- /dev/null
+++ b/src/quickcontrols/imagine/RadioButton.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ source: Imagine.url + "radiobutton-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "radiobutton-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/RadioDelegate.qml b/src/quickcontrols/imagine/RadioDelegate.qml
new file mode 100644
index 0000000000..f872798864
--- /dev/null
+++ b/src/quickcontrols/imagine/RadioDelegate.qml
@@ -0,0 +1,82 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ indicator: Image {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ source: Imagine.url + "radiodelegate-indicator"
+ ImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "radiodelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/RangeSlider.qml b/src/quickcontrols/imagine/RangeSlider.qml
new file mode 100644
index 0000000000..e0559e65b3
--- /dev/null
+++ b/src/quickcontrols/imagine/RangeSlider.qml
@@ -0,0 +1,101 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ first.implicitHandleWidth + leftPadding + rightPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ first.implicitHandleHeight + topPadding + bottomPadding,
+ second.implicitHandleHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ first.handle: Image {
+ x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
+
+ source: control.Imagine.url + "rangeslider-handle"
+ ImageSelector on source {
+ states: [
+ {"first": true},
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": control.first.pressed},
+ {"focused": control.first.handle.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.first.hovered}
+ ]
+ }
+ }
+
+ second.handle: Image {
+ x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
+
+ source: control.Imagine.url + "rangeslider-handle"
+ ImageSelector on source {
+ states: [
+ {"second": true},
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": control.second.pressed},
+ {"focused": control.second.handle.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.second.hovered}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ source: control.Imagine.url + "rangeslider-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ NinePatchImage {
+ x: control.horizontal ? control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width) : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : control.first.handle.height / 2 + control.second.visualPosition * (parent.height - control.first.handle.height)
+ width: control.horizontal ? control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width) : parent.width
+ height: control.vertical ? control.second.position * (parent.height - control.first.handle.height) - control.first.position * (parent.height - control.first.handle.height): parent.height
+
+ source: control.Imagine.url + "rangeslider-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/RoundButton.qml b/src/quickcontrols/imagine/RoundButton.qml
new file mode 100644
index 0000000000..2000d92f85
--- /dev/null
+++ b/src/quickcontrols/imagine/RoundButton.qml
@@ -0,0 +1,64 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.RoundButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.enabled && control.flat && control.highlighted ? control.palette.highlight
+ : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat
+ ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled && control.flat && control.highlighted ? control.palette.highlight
+ : control.enabled && (control.down || control.checked || control.highlighted) && !control.flat
+ ? control.palette.brightText : control.flat ? control.palette.windowText : control.palette.buttonText
+ }
+
+ background: NinePatchImage {
+ // ### TODO: radius?
+ source: Imagine.url + "roundbutton-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"checkable": control.checkable},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"flat": control.flat},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ScrollBar.qml b/src/quickcontrols/imagine/ScrollBar.qml
new file mode 100644
index 0000000000..09db8eea0b
--- /dev/null
+++ b/src/quickcontrols/imagine/ScrollBar.qml
@@ -0,0 +1,86 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: NinePatchImage {
+ width: control.availableWidth
+ height: control.availableHeight
+
+ source: Imagine.url + "scrollbar-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"interactive": control.interactive},
+ {"pressed": control.pressed},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ opacity: 0.0
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "scrollbar-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"interactive": control.interactive},
+ {"pressed": control.pressed},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ opacity: 0.0
+ }
+
+ states: [
+ State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "active"
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 }
+ },
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 }
+ PauseAnimation { duration: 3000 }
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+}
diff --git a/src/quickcontrols/imagine/ScrollIndicator.qml b/src/quickcontrols/imagine/ScrollIndicator.qml
new file mode 100644
index 0000000000..285379a307
--- /dev/null
+++ b/src/quickcontrols/imagine/ScrollIndicator.qml
@@ -0,0 +1,78 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: NinePatchImage {
+ width: control.availableWidth
+ height: control.availableHeight
+
+ source: Imagine.url + "scrollindicator-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ opacity: 0.0
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "scrollindicator-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ opacity: 0.0
+ }
+
+ states: [
+ State {
+ name: "active"
+ when: (control.active && control.size < 1.0)
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "active"
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 }
+ },
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 5000 }
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+}
diff --git a/src/quickcontrols/imagine/ScrollView.qml b/src/quickcontrols/imagine/ScrollView.qml
new file mode 100644
index 0000000000..4e7d1a8afe
--- /dev/null
+++ b/src/quickcontrols/imagine/ScrollView.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ T.ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.T.ScrollBar.horizontal.active
+ }
+
+ T.ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.T.ScrollBar.vertical.active
+ }
+
+ background: NinePatchImage {
+ source: Imagine.path + "scrollview-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SelectionRectangle.qml b/src/quickcontrols/imagine/SelectionRectangle.qml
new file mode 100644
index 0000000000..79940b6723
--- /dev/null
+++ b/src/quickcontrols/imagine/SelectionRectangle.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: handle
+ bottomRightHandle: handle
+
+ Component {
+ id: handle
+ Image {
+ id: image
+ source: Imagine.url + "slider-handle"
+ visible: SelectionRectangle.control.active
+ ImageSelector on source {
+ states: [
+ {"vertical": false},
+ {"horizontal": true},
+ {"disabled": false},
+ {"pressed": tapHandler.pressed || image.SelectionRectangle.dragging},
+ {"focused": true},
+ {"mirrored": false},
+ {"hovered": hoverHandler.hovered}
+ ]
+ }
+
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ TapHandler {
+ id: tapHandler
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Slider.qml b/src/quickcontrols/imagine/Slider.qml
new file mode 100644
index 0000000000..01b5899fcb
--- /dev/null
+++ b/src/quickcontrols/imagine/Slider.qml
@@ -0,0 +1,87 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ handle: Image {
+ x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2))
+ y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)))
+
+ source: control.Imagine.url + "slider-handle"
+ ImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": control.pressed},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ source: control.Imagine.url + "slider-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ NinePatchImage {
+ x: control.horizontal ? 0 : (parent.width - width) / 2
+ y: control.horizontal
+ ? (parent.height - height) / 2
+ : control.handle.height / 2 + control.visualPosition * (parent.height - control.handle.height)
+ width: control.horizontal
+ ? control.handle.width / 2 + control.position * (parent.width - control.handle.width)
+ : parent.width
+ height: control.vertical
+ ? control.handle.height / 2 + control.position * (parent.height - control.handle.height)
+ : parent.height
+
+ source: control.Imagine.url + "slider-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SpinBox.qml b/src/quickcontrols/imagine/SpinBox.qml
new file mode 100644
index 0000000000..973cc1d1d6
--- /dev/null
+++ b/src/quickcontrols/imagine/SpinBox.qml
@@ -0,0 +1,119 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth + 2 * padding +
+ up.implicitIndicatorWidth +
+ down.implicitIndicatorWidth)
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight,
+ down.implicitIndicatorHeight)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: (background ? background.leftPadding : 0) + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
+ rightPadding: (background ? background.rightPadding : 0) + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ z: 2
+ text: control.displayText
+ opacity: control.enabled ? 1 : 0.3
+
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+
+ NinePatchImage {
+ z: -1
+ width: control.width
+ height: control.height
+ visible: control.editable
+
+ source: Imagine.url + "spinbox-editor"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+ }
+
+ up.indicator: NinePatchImage {
+ x: control.mirrored ? 0 : control.width - width
+ height: control.height
+
+ source: Imagine.url + "spinbox-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"up": true},
+ {"disabled": !control.up.indicator.enabled},
+ {"editable": control.editable},
+ {"pressed": control.up.pressed},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.up.hovered}
+ ]
+ }
+ }
+
+ down.indicator: NinePatchImage {
+ x: control.mirrored ? control.width - width : 0
+ height: control.height
+
+ source: Imagine.url + "spinbox-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"down": true},
+ {"disabled": !control.down.indicator.enabled},
+ {"editable": control.editable},
+ {"pressed": control.down.pressed},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.down.hovered}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "spinbox-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"editable": control.editable},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SplitView.qml b/src/quickcontrols/imagine/SplitView.qml
new file mode 100644
index 0000000000..8c4c6f4ee5
--- /dev/null
+++ b/src/quickcontrols/imagine/SplitView.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SplitView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: NinePatchImage {
+ source: Imagine.url + "splitview-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.orientation === Qt.Vertical},
+ {"horizontal":control.orientation === Qt.Horizontal},
+ {"disabled": !control.enabled},
+ {"pressed": T.SplitHandle.pressed},
+ {"mirrored": control.mirrored},
+ {"hovered": T.SplitHandle.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/StackView.qml b/src/quickcontrols/imagine/StackView.qml
new file mode 100644
index 0000000000..27b9d77b9a
--- /dev/null
+++ b/src/quickcontrols/imagine/StackView.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.StackView {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth
+ implicitHeight: implicitBackgroundHeight
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ popEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ popExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ pushEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ pushExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ replaceEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ replaceExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 400; easing.type: Easing.OutCubic }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "stackview-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SwipeDelegate.qml b/src/quickcontrols/imagine/SwipeDelegate.qml
new file mode 100644
index 0000000000..24f550ce23
--- /dev/null
+++ b/src/quickcontrols/imagine/SwipeDelegate.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "swipedelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SwipeView.qml b/src/quickcontrols/imagine/SwipeView.qml
new file mode 100644
index 0000000000..c0bafd1233
--- /dev/null
+++ b/src/quickcontrols/imagine/SwipeView.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SwipeView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: ListView {
+ model: control.contentModel
+ interactive: control.interactive
+ currentIndex: control.currentIndex
+ focus: control.focus
+
+ spacing: control.spacing
+ orientation: control.orientation
+ snapMode: ListView.SnapOneItem
+ boundsBehavior: Flickable.StopAtBounds
+
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
+ highlightMoveDuration: 250
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "swipeview-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"interactive": control.interactive},
+ {"focused": control.contentItem.activeFocus},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Switch.qml b/src/quickcontrols/imagine/Switch.qml
new file mode 100644
index 0000000000..c2d3f70f2c
--- /dev/null
+++ b/src/quickcontrols/imagine/Switch.qml
@@ -0,0 +1,101 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ indicator: NinePatchImage {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth)
+ height: Math.max(implicitHeight, handle.implicitHeight)
+
+ source: control.Imagine.url + "switch-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ property NinePatchImage handle: NinePatchImage {
+ readonly property real minPos: parent.leftPadding - leftPadding
+ readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding
+ readonly property real dragPos: control.visualPosition * parent.width - (width / 2)
+
+ parent: control.indicator
+
+ x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+
+ source: control.Imagine.url + "switch-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NinePatchImage {
+ source: control.Imagine.url + "switch-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/SwitchDelegate.qml b/src/quickcontrols/imagine/SwitchDelegate.qml
new file mode 100644
index 0000000000..ed8b93c2ba
--- /dev/null
+++ b/src/quickcontrols/imagine/SwitchDelegate.qml
@@ -0,0 +1,113 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.text
+
+ indicator: NinePatchImage {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: Math.max(implicitWidth, handle.leftPadding && handle.rightPadding ? handle.implicitWidth : 2 * handle.implicitWidth)
+ height: Math.max(implicitHeight, handle.implicitHeight)
+
+ source: control.Imagine.url + "switchdelegate-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ property NinePatchImage handle: NinePatchImage {
+ readonly property real minPos: parent.leftPadding - leftPadding
+ readonly property real maxPos: parent.width - width + rightPadding - parent.rightPadding
+ readonly property real dragPos: control.visualPosition * parent.width - (width / 2)
+
+ parent: control.indicator
+
+ x: Math.max(minPos, Math.min(maxPos, control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+
+ source: control.Imagine.url + "switchdelegate-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.text
+ }
+
+ background: NinePatchImage {
+ source: control.Imagine.url + "switchdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/TabBar.qml b/src/quickcontrols/imagine/TabBar.qml
new file mode 100644
index 0000000000..a0086cb76f
--- /dev/null
+++ b/src/quickcontrols/imagine/TabBar.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 0
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 48
+ preferredHighlightEnd: width - 48
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "tabbar-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"header": control.position === T.TabBar.Header },
+ {"footer": control.position === T.TabBar.Footer },
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/TabButton.qml b/src/quickcontrols/imagine/TabButton.qml
new file mode 100644
index 0000000000..7b7a88c91b
--- /dev/null
+++ b/src/quickcontrols/imagine/TabButton.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "tabbutton-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/TextArea.qml b/src/quickcontrols/imagine/TextArea.qml
new file mode 100644
index 0000000000..d47ffffbd7
--- /dev/null
+++ b/src/quickcontrols/imagine/TextArea.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Qt.AlignVCenter
+ placeholderTextColor: control.palette.placeholderText
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "textarea-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/TextField.qml b/src/quickcontrols/imagine/TextField.qml
new file mode 100644
index 0000000000..9c0ddd1f25
--- /dev/null
+++ b/src/quickcontrols/imagine/TextField.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+ verticalAlignment: Qt.AlignVCenter
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "textfield-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"focused": control.activeFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ToolBar.qml b/src/quickcontrols/imagine/ToolBar.qml
new file mode 100644
index 0000000000..9e1467e90e
--- /dev/null
+++ b/src/quickcontrols/imagine/ToolBar.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ background: NinePatchImage {
+ source: Imagine.url + "toolbar-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"header": control.position === T.ToolBar.Header },
+ {"footer": control.position === T.ToolBar.Footer },
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ToolButton.qml b/src/quickcontrols/imagine/ToolButton.qml
new file mode 100644
index 0000000000..13b4c9b111
--- /dev/null
+++ b/src/quickcontrols/imagine/ToolButton.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ spacing: 6 // ###
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.buttonText
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "toolbutton-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"pressed": control.down},
+ {"checked": control.checked},
+ {"checkable": control.checkable},
+ {"focused": control.visualFocus},
+ {"highlighted": control.highlighted},
+ {"flat": control.flat},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ToolSeparator.qml b/src/quickcontrols/imagine/ToolSeparator.qml
new file mode 100644
index 0000000000..4861e26086
--- /dev/null
+++ b/src/quickcontrols/imagine/ToolSeparator.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ToolSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ contentItem: NinePatchImage {
+ source: Imagine.url + "toolseparator-separator"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "toolseparator-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"vertical": control.vertical},
+ {"horizontal": control.horizontal},
+ {"disabled": !control.enabled},
+ {"mirrored": control.mirrored}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/ToolTip.qml b/src/quickcontrols/imagine/ToolTip.qml
new file mode 100644
index 0000000000..841e5a3613
--- /dev/null
+++ b/src/quickcontrols/imagine/ToolTip.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0 - (background ? background.leftInset : 0)
+ y: -implicitHeight - (background ? background.topInset : 0)
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topMargin: background ? background.topInset : 0
+ leftMargin: background ? background.leftInset : 0
+ rightMargin: background ? background.rightInset : 0
+ bottomMargin: background ? background.bottomInset : 0
+
+ topPadding: background ? background.topPadding : 0
+ leftPadding: background ? background.leftPadding : 0
+ rightPadding: background ? background.rightPadding : 0
+ bottomPadding: background ? background.bottomPadding : 0
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ color: control.palette.toolTipText
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "tooltip-background"
+ NinePatchImageSelector on source {
+ states: [
+ // ###
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/Tumbler.qml b/src/quickcontrols/imagine/Tumbler.qml
new file mode 100644
index 0000000000..7052c6654c
--- /dev/null
+++ b/src/quickcontrols/imagine/Tumbler.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Imagine
+import QtQuick.Controls.Imagine.impl
+
+T.Tumbler {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topInset: background ? -background.topInset || 0 : 0
+ leftInset: background ? -background.leftInset || 0 : 0
+ rightInset: background ? -background.rightInset || 0 : 0
+ bottomInset: background ? -background.bottomInset || 0 : 0
+
+ delegate: Text {
+ text: modelData
+ font: control.font
+ color: control.palette.text
+ opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property var modelData
+ required property int index
+ }
+
+ contentItem: TumblerView {
+ implicitWidth: 60
+ implicitHeight: 200
+ model: control.model
+ delegate: control.delegate
+ path: Path {
+ startX: control.contentItem.width / 2
+ startY: -control.contentItem.delegateHeight / 2
+ PathLine {
+ x: control.contentItem.width / 2
+ y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: control.availableHeight / control.visibleItemCount
+ }
+
+ background: NinePatchImage {
+ source: Imagine.url + "tumbler-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"disabled": !control.enabled},
+ {"focused": control.visualFocus},
+ {"mirrored": control.mirrored},
+ {"hovered": control.enabled && control.hovered}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/VerticalHeaderView.qml b/src/quickcontrols/imagine/VerticalHeaderView.qml
new file mode 100644
index 0000000000..a59e228d20
--- /dev/null
+++ b/src/quickcontrols/imagine/VerticalHeaderView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.VerticalHeaderView {
+ id: control
+
+ implicitWidth: contentWidth
+ implicitHeight: syncView ? syncView.height : 0
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
+ implicitHeight: text.implicitHeight + (cellPadding * 2)
+ color: "#f6f6f6"
+ border.color: "#e4e4e4"
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: "#ff26282a"
+ }
+ }
+}
diff --git a/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js b/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js
new file mode 100644
index 0000000000..a7f9a4598d
--- /dev/null
+++ b/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/9-patch-export.js
@@ -0,0 +1,24 @@
+// 9-patch export
+//
+// This plugin crops upscaled 9-patch PNG assets when exported from Sketch,
+// to ensure that 9-patch borders remain 1px wide when upscaled.
+//
+function onExportSlices(context) {
+ var exports = context.actionContext.exports;
+ for (var i = 0; i < exports.count(); ++i) {
+ var name = exports[i].request.name();
+ var scale = exports[i].request.scale();
+ if (scale > 1 && name.endsWith(".9"))
+ cropAsset(exports[i].path, scale - 1);
+ }
+}
+
+function cropAsset(path, inset) {
+ var url = NSURL.fileURLWithPath(path);
+ var img = CIImage.imageWithContentsOfURL(url);
+ var rect = NSInsetRect(img.extent(), inset, inset);
+ var cropped = img.imageByCroppingToRect(rect);
+ var rep = NSBitmapImageRep.alloc().initWithCIImage(cropped);
+ var data = rep.PNGRepresentationWithInterlaced(false);
+ data.writeToFile(path);
+}
diff --git a/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json b/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json
new file mode 100644
index 0000000000..40807aa3d5
--- /dev/null
+++ b/src/quickcontrols/imagine/design/9-patch-export.sketchplugin/Contents/Sketch/manifest.json
@@ -0,0 +1,19 @@
+{
+ "name" : "9-patch export",
+ "description" : "Crops upscaled 9-patch PNG assets when exported from Sketch.",
+ "version" : "0.1",
+ "identifier" : "org.qt-project.sketch.9-patch-export",
+ "author" : "The Qt Project",
+ "commands" : [
+ {
+ "name" : "9-patch export",
+ "identifier" : "9-patch-export",
+ "script" : "9-patch-export.js",
+ "handlers" : {
+ "actions" : {
+ "ExportSlices": "onExportSlices",
+ },
+ },
+ },
+ ],
+}
diff --git a/src/quickcontrols/imagine/design/imagine.sketch b/src/quickcontrols/imagine/design/imagine.sketch
new file mode 100644
index 0000000000..f3535b372b
--- /dev/null
+++ b/src/quickcontrols/imagine/design/imagine.sketch
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-background.png b/src/quickcontrols/imagine/images/applicationwindow-background.png
new file mode 100644
index 0000000000..2d8d70f288
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-background@2x.png b/src/quickcontrols/imagine/images/applicationwindow-background@2x.png
new file mode 100644
index 0000000000..18fbaa4c63
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-background@3x.png b/src/quickcontrols/imagine/images/applicationwindow-background@3x.png
new file mode 100644
index 0000000000..241232b1e0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-background@4x.png b/src/quickcontrols/imagine/images/applicationwindow-background@4x.png
new file mode 100644
index 0000000000..8eb1b1ecc1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay-modal.png b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal.png
new file mode 100644
index 0000000000..d4a43d1c70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@2x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@2x.png
new file mode 100644
index 0000000000..c9a8f4124b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@3x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@3x.png
new file mode 100644
index 0000000000..4a1084a919
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@4x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@4x.png
new file mode 100644
index 0000000000..b92e600dae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay-modal@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay.png b/src/quickcontrols/imagine/images/applicationwindow-overlay.png
new file mode 100644
index 0000000000..b7da23c00f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay@2x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay@2x.png
new file mode 100644
index 0000000000..23828d5a1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay@3x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay@3x.png
new file mode 100644
index 0000000000..d9d5382867
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/applicationwindow-overlay@4x.png b/src/quickcontrols/imagine/images/applicationwindow-overlay@4x.png
new file mode 100644
index 0000000000..a76c1a3a71
--- /dev/null
+++ b/src/quickcontrols/imagine/images/applicationwindow-overlay@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/busyindicator-animation.webp b/src/quickcontrols/imagine/images/busyindicator-animation.webp
new file mode 100644
index 0000000000..ebf04c4a0c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/busyindicator-animation.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/busyindicator-animation@2x.webp b/src/quickcontrols/imagine/images/busyindicator-animation@2x.webp
new file mode 100644
index 0000000000..43805a0bdc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/busyindicator-animation@2x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/busyindicator-animation@3x.webp b/src/quickcontrols/imagine/images/busyindicator-animation@3x.webp
new file mode 100644
index 0000000000..b700b81f83
--- /dev/null
+++ b/src/quickcontrols/imagine/images/busyindicator-animation@3x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/busyindicator-animation@4x.webp b/src/quickcontrols/imagine/images/busyindicator-animation@4x.webp
new file mode 100644
index 0000000000..bfaa8df921
--- /dev/null
+++ b/src/quickcontrols/imagine/images/busyindicator-animation@4x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-disabled.9.png b/src/quickcontrols/imagine/images/button-background-checked-disabled.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-disabled@2x.9.png b/src/quickcontrols/imagine/images/button-background-checked-disabled@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-disabled@3x.9.png b/src/quickcontrols/imagine/images/button-background-checked-disabled@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-disabled@4x.9.png b/src/quickcontrols/imagine/images/button-background-checked-disabled@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-focused.9.png b/src/quickcontrols/imagine/images/button-background-checked-focused.9.png
new file mode 100644
index 0000000000..e3d14e9954
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-focused@2x.9.png b/src/quickcontrols/imagine/images/button-background-checked-focused@2x.9.png
new file mode 100644
index 0000000000..ebc74b4a34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-focused@3x.9.png b/src/quickcontrols/imagine/images/button-background-checked-focused@3x.9.png
new file mode 100644
index 0000000000..7583472304
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-focused@4x.9.png b/src/quickcontrols/imagine/images/button-background-checked-focused@4x.9.png
new file mode 100644
index 0000000000..9b570f4d15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-hovered.9.png b/src/quickcontrols/imagine/images/button-background-checked-hovered.9.png
new file mode 100644
index 0000000000..e3d14e9954
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-hovered@2x.9.png b/src/quickcontrols/imagine/images/button-background-checked-hovered@2x.9.png
new file mode 100644
index 0000000000..ebc74b4a34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-hovered@3x.9.png b/src/quickcontrols/imagine/images/button-background-checked-hovered@3x.9.png
new file mode 100644
index 0000000000..7583472304
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked-hovered@4x.9.png b/src/quickcontrols/imagine/images/button-background-checked-hovered@4x.9.png
new file mode 100644
index 0000000000..9b570f4d15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked.9.png b/src/quickcontrols/imagine/images/button-background-checked.9.png
new file mode 100644
index 0000000000..d0942509f7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked@2x.9.png b/src/quickcontrols/imagine/images/button-background-checked@2x.9.png
new file mode 100644
index 0000000000..c38bcd026f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked@3x.9.png b/src/quickcontrols/imagine/images/button-background-checked@3x.9.png
new file mode 100644
index 0000000000..80889bf801
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-checked@4x.9.png b/src/quickcontrols/imagine/images/button-background-checked@4x.9.png
new file mode 100644
index 0000000000..05de8377ef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-disabled.9.png b/src/quickcontrols/imagine/images/button-background-disabled.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/button-background-disabled@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/button-background-disabled@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/button-background-disabled@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked-pressed.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-checked@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-checked@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-disabled.9.png b/src/quickcontrols/imagine/images/button-background-flat-disabled.9.png
new file mode 100644
index 0000000000..59907409c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-disabled@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-disabled@2x.9.png
new file mode 100644
index 0000000000..d66acd9c48
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-disabled@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-disabled@3x.9.png
new file mode 100644
index 0000000000..89b8c35357
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-disabled@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-disabled@4x.9.png
new file mode 100644
index 0000000000..d3a675cfe7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted.9.png
new file mode 100644
index 0000000000..59907409c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted@2x.9.png
new file mode 100644
index 0000000000..d66acd9c48
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted@3x.9.png
new file mode 100644
index 0000000000..89b8c35357
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-highlighted@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-highlighted@4x.9.png
new file mode 100644
index 0000000000..d3a675cfe7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-hovered.9.png b/src/quickcontrols/imagine/images/button-background-flat-hovered.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-hovered@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-hovered@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-hovered@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-hovered@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-hovered@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-hovered@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-pressed.9.png b/src/quickcontrols/imagine/images/button-background-flat-pressed.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-pressed@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat-pressed@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-pressed@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat-pressed@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat-pressed@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat-pressed@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat.9.png b/src/quickcontrols/imagine/images/button-background-flat.9.png
new file mode 100644
index 0000000000..59907409c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat@2x.9.png b/src/quickcontrols/imagine/images/button-background-flat@2x.9.png
new file mode 100644
index 0000000000..d66acd9c48
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat@3x.9.png b/src/quickcontrols/imagine/images/button-background-flat@3x.9.png
new file mode 100644
index 0000000000..89b8c35357
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-flat@4x.9.png b/src/quickcontrols/imagine/images/button-background-flat@4x.9.png
new file mode 100644
index 0000000000..d3a675cfe7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-flat@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-focused.9.png b/src/quickcontrols/imagine/images/button-background-focused.9.png
new file mode 100644
index 0000000000..42e40e6082
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-focused@2x.9.png b/src/quickcontrols/imagine/images/button-background-focused@2x.9.png
new file mode 100644
index 0000000000..90dc70bfe0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-focused@3x.9.png b/src/quickcontrols/imagine/images/button-background-focused@3x.9.png
new file mode 100644
index 0000000000..2ed2340cb0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-focused@4x.9.png b/src/quickcontrols/imagine/images/button-background-focused@4x.9.png
new file mode 100644
index 0000000000..e1428e37eb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-checked.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-checked.9.png
new file mode 100644
index 0000000000..7a2a401106
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-checked@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-checked@2x.9.png
new file mode 100644
index 0000000000..05b2f21423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-checked@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-checked@3x.9.png
new file mode 100644
index 0000000000..8c22e1f32a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-checked@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-checked@4x.9.png
new file mode 100644
index 0000000000..c5617f0e0d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-disabled.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-disabled.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-disabled@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-disabled@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-disabled@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-focused.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-focused.9.png
new file mode 100644
index 0000000000..3ea580e01f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-focused@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-focused@2x.9.png
new file mode 100644
index 0000000000..effcce1f42
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-focused@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-focused@3x.9.png
new file mode 100644
index 0000000000..502ac68999
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-focused@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-focused@4x.9.png
new file mode 100644
index 0000000000..3243231ef7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-hovered.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-hovered.9.png
new file mode 100644
index 0000000000..3ea580e01f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-hovered@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@2x.9.png
new file mode 100644
index 0000000000..effcce1f42
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-hovered@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@3x.9.png
new file mode 100644
index 0000000000..502ac68999
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-hovered@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@4x.9.png
new file mode 100644
index 0000000000..3243231ef7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-pressed.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-pressed.9.png
new file mode 100644
index 0000000000..7a2a401106
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-pressed@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@2x.9.png
new file mode 100644
index 0000000000..05b2f21423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-pressed@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@3x.9.png
new file mode 100644
index 0000000000..8c22e1f32a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted-pressed@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@4x.9.png
new file mode 100644
index 0000000000..c5617f0e0d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted.9.png b/src/quickcontrols/imagine/images/button-background-highlighted.9.png
new file mode 100644
index 0000000000..7761595fcd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..8bb42c45af
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..8c23c021a5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/button-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..365cd0489d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-hovered.9.png b/src/quickcontrols/imagine/images/button-background-hovered.9.png
new file mode 100644
index 0000000000..42e40e6082
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/button-background-hovered@2x.9.png
new file mode 100644
index 0000000000..90dc70bfe0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/button-background-hovered@3x.9.png
new file mode 100644
index 0000000000..2ed2340cb0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/button-background-hovered@4x.9.png
new file mode 100644
index 0000000000..e1428e37eb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-pressed.9.png b/src/quickcontrols/imagine/images/button-background-pressed.9.png
new file mode 100644
index 0000000000..d0942509f7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/button-background-pressed@2x.9.png
new file mode 100644
index 0000000000..c38bcd026f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/button-background-pressed@3x.9.png
new file mode 100644
index 0000000000..80889bf801
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/button-background-pressed@4x.9.png
new file mode 100644
index 0000000000..05de8377ef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background.9.png b/src/quickcontrols/imagine/images/button-background.9.png
new file mode 100644
index 0000000000..6f1daed831
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background@2x.9.png b/src/quickcontrols/imagine/images/button-background@2x.9.png
new file mode 100644
index 0000000000..4a2507f535
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background@3x.9.png b/src/quickcontrols/imagine/images/button-background@3x.9.png
new file mode 100644
index 0000000000..4f13b4ef55
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/button-background@4x.9.png b/src/quickcontrols/imagine/images/button-background@4x.9.png
new file mode 100644
index 0000000000..0e1ab4524e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/button-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed.png
new file mode 100644
index 0000000000..9c03d096e4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..680ba3efca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..974205de54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..2c8b6aabf4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked.png
new file mode 100644
index 0000000000..598b163aaa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked@2x.png
new file mode 100644
index 0000000000..06382264f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked@3x.png
new file mode 100644
index 0000000000..12a32dcd20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-checked@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-checked@4x.png
new file mode 100644
index 0000000000..4bc6701d65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-disabled.png b/src/quickcontrols/imagine/images/checkbox-indicator-disabled.png
new file mode 100644
index 0000000000..0a499f8f2d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@2x.png
new file mode 100644
index 0000000000..db652c5ac9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@3x.png
new file mode 100644
index 0000000000..482f045d32
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@4x.png
new file mode 100644
index 0000000000..a386e27251
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-focused.png b/src/quickcontrols/imagine/images/checkbox-indicator-focused.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-focused@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-focused@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-focused@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-focused@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-focused@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-focused@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-hovered.png b/src/quickcontrols/imagine/images/checkbox-indicator-hovered.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused.png
new file mode 100644
index 0000000000..cd07b1ccb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@2x.png
new file mode 100644
index 0000000000..acae6afffe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@3x.png
new file mode 100644
index 0000000000..1e8d2c4575
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@4x.png
new file mode 100644
index 0000000000..577017c4c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered.png
new file mode 100644
index 0000000000..cd07b1ccb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png
new file mode 100644
index 0000000000..acae6afffe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png
new file mode 100644
index 0000000000..1e8d2c4575
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png
new file mode 100644
index 0000000000..577017c4c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed.png
new file mode 100644
index 0000000000..928706ab27
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png
new file mode 100644
index 0000000000..3645d78a21
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png
new file mode 100644
index 0000000000..ade63bd04b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png
new file mode 100644
index 0000000000..cd73617e3c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked.png
new file mode 100644
index 0000000000..e404a4e3c8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@2x.png
new file mode 100644
index 0000000000..2d0f51767a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@3x.png
new file mode 100644
index 0000000000..4b9777b7ea
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@4x.png
new file mode 100644
index 0000000000..e0f67e9894
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-partially-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-pressed.png b/src/quickcontrols/imagine/images/checkbox-indicator-pressed.png
new file mode 100644
index 0000000000..a1baaf903e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@2x.png
new file mode 100644
index 0000000000..81a7c3647a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@3x.png
new file mode 100644
index 0000000000..9325de38cb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@4x.png
new file mode 100644
index 0000000000..c93b8fb8a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator.png b/src/quickcontrols/imagine/images/checkbox-indicator.png
new file mode 100644
index 0000000000..2b3e2323d7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator@2x.png b/src/quickcontrols/imagine/images/checkbox-indicator@2x.png
new file mode 100644
index 0000000000..ce8985dbb1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator@3x.png b/src/quickcontrols/imagine/images/checkbox-indicator@3x.png
new file mode 100644
index 0000000000..2968731dd7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkbox-indicator@4x.png b/src/quickcontrols/imagine/images/checkbox-indicator@4x.png
new file mode 100644
index 0000000000..ea8da28498
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkbox-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-disabled.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-disabled.9.png
new file mode 100644
index 0000000000..23570729d6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@2x.9.png
new file mode 100644
index 0000000000..c7abb65c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@3x.9.png
new file mode 100644
index 0000000000..46b84d7da4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f4dfd338f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-focused.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-focused.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-focused@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-focused@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-focused@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-focused@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-focused@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-focused@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-highlighted.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted.9.png
new file mode 100644
index 0000000000..e79d8e1d01
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..ea68d35fc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..6d61041599
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..590cca96a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-hovered.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-hovered.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-pressed.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-pressed.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background.9.png b/src/quickcontrols/imagine/images/checkdelegate-background.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background@2x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background@3x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-background@4x.9.png b/src/quickcontrols/imagine/images/checkdelegate-background@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed.png
new file mode 100644
index 0000000000..9c03d096e4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..680ba3efca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..974205de54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..2c8b6aabf4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked.png
new file mode 100644
index 0000000000..598b163aaa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@2x.png
new file mode 100644
index 0000000000..06382264f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@3x.png
new file mode 100644
index 0000000000..12a32dcd20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@4x.png
new file mode 100644
index 0000000000..4bc6701d65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled.png
new file mode 100644
index 0000000000..0a499f8f2d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@2x.png
new file mode 100644
index 0000000000..db652c5ac9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@3x.png
new file mode 100644
index 0000000000..482f045d32
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@4x.png
new file mode 100644
index 0000000000..a386e27251
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-focused.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused.png
new file mode 100644
index 0000000000..cd07b1ccb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png
new file mode 100644
index 0000000000..acae6afffe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png
new file mode 100644
index 0000000000..1e8d2c4575
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png
new file mode 100644
index 0000000000..577017c4c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered.png
new file mode 100644
index 0000000000..cd07b1ccb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png
new file mode 100644
index 0000000000..acae6afffe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png
new file mode 100644
index 0000000000..1e8d2c4575
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png
new file mode 100644
index 0000000000..577017c4c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed.png
new file mode 100644
index 0000000000..928706ab27
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png
new file mode 100644
index 0000000000..3645d78a21
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png
new file mode 100644
index 0000000000..ade63bd04b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png
new file mode 100644
index 0000000000..cd73617e3c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked.png
new file mode 100644
index 0000000000..e404a4e3c8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@2x.png
new file mode 100644
index 0000000000..2d0f51767a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@3x.png
new file mode 100644
index 0000000000..4b9777b7ea
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@4x.png
new file mode 100644
index 0000000000..e0f67e9894
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-partially-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed.png
new file mode 100644
index 0000000000..a1baaf903e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@2x.png
new file mode 100644
index 0000000000..81a7c3647a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@3x.png
new file mode 100644
index 0000000000..9325de38cb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@4x.png
new file mode 100644
index 0000000000..c93b8fb8a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator.png b/src/quickcontrols/imagine/images/checkdelegate-indicator.png
new file mode 100644
index 0000000000..2b3e2323d7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator@2x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator@2x.png
new file mode 100644
index 0000000000..ce8985dbb1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator@3x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator@3x.png
new file mode 100644
index 0000000000..2968731dd7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/checkdelegate-indicator@4x.png b/src/quickcontrols/imagine/images/checkdelegate-indicator@4x.png
new file mode 100644
index 0000000000..ea8da28498
--- /dev/null
+++ b/src/quickcontrols/imagine/images/checkdelegate-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-disabled.9.png b/src/quickcontrols/imagine/images/combobox-background-disabled.9.png
new file mode 100644
index 0000000000..a91b4b5519
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-disabled@2x.9.png
new file mode 100644
index 0000000000..570b990c9b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-disabled@3x.9.png
new file mode 100644
index 0000000000..b0f9b9c4ce
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-disabled@4x.9.png
new file mode 100644
index 0000000000..6e810f7592
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-disabled.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-disabled.9.png
new file mode 100644
index 0000000000..e192afb8a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-disabled@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@2x.9.png
new file mode 100644
index 0000000000..58a0f6e9a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-disabled@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@3x.9.png
new file mode 100644
index 0000000000..cd6f226b33
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-disabled@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@4x.9.png
new file mode 100644
index 0000000000..ff9103b091
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-focused.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-focused.9.png
new file mode 100644
index 0000000000..a0f079bc47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-focused@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-focused@2x.9.png
new file mode 100644
index 0000000000..83cb503f89
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-focused@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-focused@3x.9.png
new file mode 100644
index 0000000000..4cf96edf90
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable-focused@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable-focused@4x.9.png
new file mode 100644
index 0000000000..5823de804f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable.9.png b/src/quickcontrols/imagine/images/combobox-background-editable.9.png
new file mode 100644
index 0000000000..8edac13208
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable@2x.9.png
new file mode 100644
index 0000000000..15e465f12a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable@3x.9.png
new file mode 100644
index 0000000000..910b48d2c6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-editable@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-editable@4x.9.png
new file mode 100644
index 0000000000..ff0f64118e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-editable@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-focused.9.png b/src/quickcontrols/imagine/images/combobox-background-focused.9.png
new file mode 100644
index 0000000000..a3865fa698
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-focused@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-focused@2x.9.png
new file mode 100644
index 0000000000..fc49f4b824
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-focused@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-focused@3x.9.png
new file mode 100644
index 0000000000..b432b4ec54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-focused@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-focused@4x.9.png
new file mode 100644
index 0000000000..1586205998
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-hovered.9.png b/src/quickcontrols/imagine/images/combobox-background-hovered.9.png
new file mode 100644
index 0000000000..a3865fa698
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-hovered@2x.9.png
new file mode 100644
index 0000000000..fc49f4b824
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-hovered@3x.9.png
new file mode 100644
index 0000000000..b432b4ec54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-hovered@4x.9.png
new file mode 100644
index 0000000000..1586205998
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-open.9.png b/src/quickcontrols/imagine/images/combobox-background-open.9.png
new file mode 100644
index 0000000000..1be8440336
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-open.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-open@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-open@2x.9.png
new file mode 100644
index 0000000000..95f7cd6d8a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-open@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-open@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-open@3x.9.png
new file mode 100644
index 0000000000..2f71271ce8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-open@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-open@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-open@4x.9.png
new file mode 100644
index 0000000000..17f6f2ce11
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-open@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-pressed.9.png b/src/quickcontrols/imagine/images/combobox-background-pressed.9.png
new file mode 100644
index 0000000000..1be8440336
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/combobox-background-pressed@2x.9.png
new file mode 100644
index 0000000000..95f7cd6d8a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/combobox-background-pressed@3x.9.png
new file mode 100644
index 0000000000..2f71271ce8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/combobox-background-pressed@4x.9.png
new file mode 100644
index 0000000000..17f6f2ce11
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background.9.png b/src/quickcontrols/imagine/images/combobox-background.9.png
new file mode 100644
index 0000000000..4ed8ddc36f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background@2x.9.png b/src/quickcontrols/imagine/images/combobox-background@2x.9.png
new file mode 100644
index 0000000000..1d7a88943a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background@3x.9.png b/src/quickcontrols/imagine/images/combobox-background@3x.9.png
new file mode 100644
index 0000000000..313630f85c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-background@4x.9.png b/src/quickcontrols/imagine/images/combobox-background@4x.9.png
new file mode 100644
index 0000000000..be63d56ea0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-disabled.png b/src/quickcontrols/imagine/images/combobox-indicator-disabled.png
new file mode 100644
index 0000000000..761537f9c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/combobox-indicator-disabled@2x.png
new file mode 100644
index 0000000000..322b7b6837
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/combobox-indicator-disabled@3x.png
new file mode 100644
index 0000000000..73feec349d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/combobox-indicator-disabled@4x.png
new file mode 100644
index 0000000000..910c4d3d21
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled.png
new file mode 100644
index 0000000000..4399b6aab5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@2x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@2x.png
new file mode 100644
index 0000000000..e45a2ad125
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@3x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@3x.png
new file mode 100644
index 0000000000..23f74b10ea
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@4x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@4x.png
new file mode 100644
index 0000000000..db495899a8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled.png
new file mode 100644
index 0000000000..2e954ae99e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png
new file mode 100644
index 0000000000..252a5e37d5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png
new file mode 100644
index 0000000000..6d939a93f6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png
new file mode 100644
index 0000000000..00a21ebdfb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored.png
new file mode 100644
index 0000000000..ad52991212
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@2x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@2x.png
new file mode 100644
index 0000000000..70b995c135
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@3x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@3x.png
new file mode 100644
index 0000000000..9b86537727
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@4x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@4x.png
new file mode 100644
index 0000000000..b4f7ae25d3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable-mirrored@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable.png b/src/quickcontrols/imagine/images/combobox-indicator-editable.png
new file mode 100644
index 0000000000..e053109f10
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable@2x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable@2x.png
new file mode 100644
index 0000000000..b8dfd6fe0e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable@3x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable@3x.png
new file mode 100644
index 0000000000..2cdee7a8f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator-editable@4x.png b/src/quickcontrols/imagine/images/combobox-indicator-editable@4x.png
new file mode 100644
index 0000000000..2569b4aef0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator-editable@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator.png b/src/quickcontrols/imagine/images/combobox-indicator.png
new file mode 100644
index 0000000000..cc32f2a272
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator@2x.png b/src/quickcontrols/imagine/images/combobox-indicator@2x.png
new file mode 100644
index 0000000000..57ea3f3082
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator@3x.png b/src/quickcontrols/imagine/images/combobox-indicator@3x.png
new file mode 100644
index 0000000000..384f8152db
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-indicator@4x.png b/src/quickcontrols/imagine/images/combobox-indicator@4x.png
new file mode 100644
index 0000000000..f326c03b4b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-popup.9.png b/src/quickcontrols/imagine/images/combobox-popup.9.png
new file mode 100644
index 0000000000..7344cdf6db
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-popup.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-popup@2x.9.png b/src/quickcontrols/imagine/images/combobox-popup@2x.9.png
new file mode 100644
index 0000000000..00c88c7d59
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-popup@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-popup@3x.9.png b/src/quickcontrols/imagine/images/combobox-popup@3x.9.png
new file mode 100644
index 0000000000..82d911ed66
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-popup@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/combobox-popup@4x.9.png b/src/quickcontrols/imagine/images/combobox-popup@4x.9.png
new file mode 100644
index 0000000000..98db30af66
--- /dev/null
+++ b/src/quickcontrols/imagine/images/combobox-popup@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-focused.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused.9.png
new file mode 100644
index 0000000000..e3d14e9954
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@2x.9.png
new file mode 100644
index 0000000000..ebc74b4a34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@3x.9.png
new file mode 100644
index 0000000000..7583472304
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@4x.9.png
new file mode 100644
index 0000000000..9b570f4d15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered.9.png
new file mode 100644
index 0000000000..e3d14e9954
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@2x.9.png
new file mode 100644
index 0000000000..ebc74b4a34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@3x.9.png
new file mode 100644
index 0000000000..7583472304
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@4x.9.png
new file mode 100644
index 0000000000..9b570f4d15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked.9.png
new file mode 100644
index 0000000000..d0942509f7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked@2x.9.png
new file mode 100644
index 0000000000..c38bcd026f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked@3x.9.png
new file mode 100644
index 0000000000..80889bf801
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-checked@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-checked@4x.9.png
new file mode 100644
index 0000000000..05de8377ef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled.9.png
new file mode 100644
index 0000000000..8196289cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled@2x.9.png
new file mode 100644
index 0000000000..76cd44908b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled@3x.9.png
new file mode 100644
index 0000000000..8bd6259a47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-disabled@4x.9.png
new file mode 100644
index 0000000000..3e08152013
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-focused.9.png b/src/quickcontrols/imagine/images/delaybutton-background-focused.9.png
new file mode 100644
index 0000000000..294ff8bda6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-focused@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-focused@2x.9.png
new file mode 100644
index 0000000000..48e2bbcb56
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-focused@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-focused@3x.9.png
new file mode 100644
index 0000000000..0981eb2ac5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-focused@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-focused@4x.9.png
new file mode 100644
index 0000000000..4ae48bfa36
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-hovered.9.png b/src/quickcontrols/imagine/images/delaybutton-background-hovered.9.png
new file mode 100644
index 0000000000..42e40e6082
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-hovered@2x.9.png
new file mode 100644
index 0000000000..90dc70bfe0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-hovered@3x.9.png
new file mode 100644
index 0000000000..2ed2340cb0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-hovered@4x.9.png
new file mode 100644
index 0000000000..e1428e37eb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-pressed.9.png b/src/quickcontrols/imagine/images/delaybutton-background-pressed.9.png
new file mode 100644
index 0000000000..d0942509f7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-pressed@2x.9.png
new file mode 100644
index 0000000000..c38bcd026f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-pressed@3x.9.png
new file mode 100644
index 0000000000..80889bf801
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background-pressed@4x.9.png
new file mode 100644
index 0000000000..05de8377ef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background.9.png b/src/quickcontrols/imagine/images/delaybutton-background.9.png
new file mode 100644
index 0000000000..6f1daed831
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-background@2x.9.png
new file mode 100644
index 0000000000..4a2507f535
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-background@3x.9.png
new file mode 100644
index 0000000000..4f13b4ef55
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-background@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-background@4x.9.png
new file mode 100644
index 0000000000..0e1ab4524e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-mask.9.png b/src/quickcontrols/imagine/images/delaybutton-mask.9.png
new file mode 100644
index 0000000000..76d3967d04
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-mask.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-mask@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-mask@2x.9.png
new file mode 100644
index 0000000000..b8db224cc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-mask@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-mask@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-mask@3x.9.png
new file mode 100644
index 0000000000..3bff2c15ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-mask@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-mask@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-mask@4x.9.png
new file mode 100644
index 0000000000..045c7fac88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-mask@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress-disabled.9.png b/src/quickcontrols/imagine/images/delaybutton-progress-disabled.9.png
new file mode 100644
index 0000000000..5c209c9c6b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress-disabled@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@2x.9.png
new file mode 100644
index 0000000000..0ef11a8d3c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress-disabled@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@3x.9.png
new file mode 100644
index 0000000000..f3f8e54796
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress-disabled@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@4x.9.png
new file mode 100644
index 0000000000..b24f50e669
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress.9.png b/src/quickcontrols/imagine/images/delaybutton-progress.9.png
new file mode 100644
index 0000000000..4dd3aec5fe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress@2x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress@2x.9.png
new file mode 100644
index 0000000000..cd422076e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress@3x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress@3x.9.png
new file mode 100644
index 0000000000..08610300be
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/delaybutton-progress@4x.9.png b/src/quickcontrols/imagine/images/delaybutton-progress@4x.9.png
new file mode 100644
index 0000000000..24cc19ba0a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/delaybutton-progress@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-disabled.png b/src/quickcontrols/imagine/images/dial-background-disabled.png
new file mode 100644
index 0000000000..d7c4f847ce
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-disabled@2x.png b/src/quickcontrols/imagine/images/dial-background-disabled@2x.png
new file mode 100644
index 0000000000..56b085df96
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-disabled@3x.png b/src/quickcontrols/imagine/images/dial-background-disabled@3x.png
new file mode 100644
index 0000000000..4f1e17e7a9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-disabled@4x.png b/src/quickcontrols/imagine/images/dial-background-disabled@4x.png
new file mode 100644
index 0000000000..4aacbf8222
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-focused.png b/src/quickcontrols/imagine/images/dial-background-focused.png
new file mode 100644
index 0000000000..fc53d5c407
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-focused@2x.png b/src/quickcontrols/imagine/images/dial-background-focused@2x.png
new file mode 100644
index 0000000000..6b547a172d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-focused@3x.png b/src/quickcontrols/imagine/images/dial-background-focused@3x.png
new file mode 100644
index 0000000000..7b8a2582ad
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background-focused@4x.png b/src/quickcontrols/imagine/images/dial-background-focused@4x.png
new file mode 100644
index 0000000000..406f46b591
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background.png b/src/quickcontrols/imagine/images/dial-background.png
new file mode 100644
index 0000000000..58aa09edb2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background@2x.png b/src/quickcontrols/imagine/images/dial-background@2x.png
new file mode 100644
index 0000000000..87cd9a0f6b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background@3x.png b/src/quickcontrols/imagine/images/dial-background@3x.png
new file mode 100644
index 0000000000..103fb46107
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-background@4x.png b/src/quickcontrols/imagine/images/dial-background@4x.png
new file mode 100644
index 0000000000..c290f84a8f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-disabled.png b/src/quickcontrols/imagine/images/dial-handle-disabled.png
new file mode 100644
index 0000000000..a93fd0f2b6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-disabled@2x.png b/src/quickcontrols/imagine/images/dial-handle-disabled@2x.png
new file mode 100644
index 0000000000..2cd536be06
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-disabled@3x.png b/src/quickcontrols/imagine/images/dial-handle-disabled@3x.png
new file mode 100644
index 0000000000..56b9fe06db
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-disabled@4x.png b/src/quickcontrols/imagine/images/dial-handle-disabled@4x.png
new file mode 100644
index 0000000000..5098d6887c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-hovered.png b/src/quickcontrols/imagine/images/dial-handle-focused-hovered.png
new file mode 100644
index 0000000000..2a143f2afb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-hovered@2x.png b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@2x.png
new file mode 100644
index 0000000000..24dfee8284
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-hovered@3x.png b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@3x.png
new file mode 100644
index 0000000000..16e128d5cc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-hovered@4x.png b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@4x.png
new file mode 100644
index 0000000000..b4523acb70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-pressed.png b/src/quickcontrols/imagine/images/dial-handle-focused-pressed.png
new file mode 100644
index 0000000000..d43971ff4d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-pressed@2x.png b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@2x.png
new file mode 100644
index 0000000000..caa2376e9b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-pressed@3x.png b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@3x.png
new file mode 100644
index 0000000000..c291388316
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused-pressed@4x.png b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@4x.png
new file mode 100644
index 0000000000..50ff1c8bf4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused.png b/src/quickcontrols/imagine/images/dial-handle-focused.png
new file mode 100644
index 0000000000..d2733474b9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused@2x.png b/src/quickcontrols/imagine/images/dial-handle-focused@2x.png
new file mode 100644
index 0000000000..c7bc8f743b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused@3x.png b/src/quickcontrols/imagine/images/dial-handle-focused@3x.png
new file mode 100644
index 0000000000..c0dcd94535
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-focused@4x.png b/src/quickcontrols/imagine/images/dial-handle-focused@4x.png
new file mode 100644
index 0000000000..b9d2234c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-hovered.png b/src/quickcontrols/imagine/images/dial-handle-hovered.png
new file mode 100644
index 0000000000..f5d0ac6f7f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-hovered@2x.png b/src/quickcontrols/imagine/images/dial-handle-hovered@2x.png
new file mode 100644
index 0000000000..da23baaa90
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-hovered@3x.png b/src/quickcontrols/imagine/images/dial-handle-hovered@3x.png
new file mode 100644
index 0000000000..7287a41923
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-hovered@4x.png b/src/quickcontrols/imagine/images/dial-handle-hovered@4x.png
new file mode 100644
index 0000000000..9f6982dd56
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-pressed.png b/src/quickcontrols/imagine/images/dial-handle-pressed.png
new file mode 100644
index 0000000000..3b98e1245c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-pressed@2x.png b/src/quickcontrols/imagine/images/dial-handle-pressed@2x.png
new file mode 100644
index 0000000000..454e73644d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-pressed@3x.png b/src/quickcontrols/imagine/images/dial-handle-pressed@3x.png
new file mode 100644
index 0000000000..794516da1e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle-pressed@4x.png b/src/quickcontrols/imagine/images/dial-handle-pressed@4x.png
new file mode 100644
index 0000000000..211b1135be
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle.png b/src/quickcontrols/imagine/images/dial-handle.png
new file mode 100644
index 0000000000..652b82d30e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle@2x.png b/src/quickcontrols/imagine/images/dial-handle@2x.png
new file mode 100644
index 0000000000..3c86a59bff
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle@3x.png b/src/quickcontrols/imagine/images/dial-handle@3x.png
new file mode 100644
index 0000000000..cbfcdbcdc6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dial-handle@4x.png b/src/quickcontrols/imagine/images/dial-handle@4x.png
new file mode 100644
index 0000000000..2872e006fa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dial-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-background.9.png b/src/quickcontrols/imagine/images/dialog-background.9.png
new file mode 100644
index 0000000000..c842b5ff58
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-background@2x.9.png b/src/quickcontrols/imagine/images/dialog-background@2x.9.png
new file mode 100644
index 0000000000..ca23df1f0d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-background@3x.9.png b/src/quickcontrols/imagine/images/dialog-background@3x.9.png
new file mode 100644
index 0000000000..46cd406536
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-background@4x.9.png b/src/quickcontrols/imagine/images/dialog-background@4x.9.png
new file mode 100644
index 0000000000..3da74119cc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay-modal.png b/src/quickcontrols/imagine/images/dialog-overlay-modal.png
new file mode 100644
index 0000000000..d4a43d1c70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay-modal.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay-modal@2x.png b/src/quickcontrols/imagine/images/dialog-overlay-modal@2x.png
new file mode 100644
index 0000000000..c9a8f4124b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay-modal@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay-modal@3x.png b/src/quickcontrols/imagine/images/dialog-overlay-modal@3x.png
new file mode 100644
index 0000000000..4a1084a919
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay-modal@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay-modal@4x.png b/src/quickcontrols/imagine/images/dialog-overlay-modal@4x.png
new file mode 100644
index 0000000000..b92e600dae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay-modal@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay.png b/src/quickcontrols/imagine/images/dialog-overlay.png
new file mode 100644
index 0000000000..b7da23c00f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay@2x.png b/src/quickcontrols/imagine/images/dialog-overlay@2x.png
new file mode 100644
index 0000000000..23828d5a1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay@3x.png b/src/quickcontrols/imagine/images/dialog-overlay@3x.png
new file mode 100644
index 0000000000..d9d5382867
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialog-overlay@4x.png b/src/quickcontrols/imagine/images/dialog-overlay@4x.png
new file mode 100644
index 0000000000..a76c1a3a71
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialog-overlay@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialogbuttonbox-background.9.png b/src/quickcontrols/imagine/images/dialogbuttonbox-background.9.png
new file mode 100644
index 0000000000..4b080c7f8b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialogbuttonbox-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialogbuttonbox-background@2x.9.png b/src/quickcontrols/imagine/images/dialogbuttonbox-background@2x.9.png
new file mode 100644
index 0000000000..38306bea93
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialogbuttonbox-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialogbuttonbox-background@3x.9.png b/src/quickcontrols/imagine/images/dialogbuttonbox-background@3x.9.png
new file mode 100644
index 0000000000..66afaabe22
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialogbuttonbox-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/dialogbuttonbox-background@4x.9.png b/src/quickcontrols/imagine/images/dialogbuttonbox-background@4x.9.png
new file mode 100644
index 0000000000..7d0db539c1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/dialogbuttonbox-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-bottom.9.png b/src/quickcontrols/imagine/images/drawer-background-bottom.9.png
new file mode 100644
index 0000000000..023d8bf806
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-bottom.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-bottom@2x.9.png b/src/quickcontrols/imagine/images/drawer-background-bottom@2x.9.png
new file mode 100644
index 0000000000..6b229ce9e7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-bottom@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-bottom@3x.9.png b/src/quickcontrols/imagine/images/drawer-background-bottom@3x.9.png
new file mode 100644
index 0000000000..c61118b651
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-bottom@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-bottom@4x.9.png b/src/quickcontrols/imagine/images/drawer-background-bottom@4x.9.png
new file mode 100644
index 0000000000..08b2e25f30
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-bottom@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-left.9.png b/src/quickcontrols/imagine/images/drawer-background-left.9.png
new file mode 100644
index 0000000000..5145a3a3f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-left.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-left@2x.9.png b/src/quickcontrols/imagine/images/drawer-background-left@2x.9.png
new file mode 100644
index 0000000000..95a80ab530
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-left@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-left@3x.9.png b/src/quickcontrols/imagine/images/drawer-background-left@3x.9.png
new file mode 100644
index 0000000000..bd330b7f8e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-left@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-left@4x.9.png b/src/quickcontrols/imagine/images/drawer-background-left@4x.9.png
new file mode 100644
index 0000000000..10f0702a11
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-left@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-right.9.png b/src/quickcontrols/imagine/images/drawer-background-right.9.png
new file mode 100644
index 0000000000..37afb73465
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-right.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-right@2x.9.png b/src/quickcontrols/imagine/images/drawer-background-right@2x.9.png
new file mode 100644
index 0000000000..cfbc8f35a2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-right@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-right@3x.9.png b/src/quickcontrols/imagine/images/drawer-background-right@3x.9.png
new file mode 100644
index 0000000000..9a49b6d530
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-right@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-right@4x.9.png b/src/quickcontrols/imagine/images/drawer-background-right@4x.9.png
new file mode 100644
index 0000000000..564057760a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-right@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-top.9.png b/src/quickcontrols/imagine/images/drawer-background-top.9.png
new file mode 100644
index 0000000000..56da059ff9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-top.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-top@2x.9.png b/src/quickcontrols/imagine/images/drawer-background-top@2x.9.png
new file mode 100644
index 0000000000..976671ce59
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-top@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-top@3x.9.png b/src/quickcontrols/imagine/images/drawer-background-top@3x.9.png
new file mode 100644
index 0000000000..7c07deba34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-top@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-background-top@4x.9.png b/src/quickcontrols/imagine/images/drawer-background-top@4x.9.png
new file mode 100644
index 0000000000..e3b1edf7c2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-background-top@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay-modal.png b/src/quickcontrols/imagine/images/drawer-overlay-modal.png
new file mode 100644
index 0000000000..d4a43d1c70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay-modal.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay-modal@2x.png b/src/quickcontrols/imagine/images/drawer-overlay-modal@2x.png
new file mode 100644
index 0000000000..c9a8f4124b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay-modal@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay-modal@3x.png b/src/quickcontrols/imagine/images/drawer-overlay-modal@3x.png
new file mode 100644
index 0000000000..4a1084a919
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay-modal@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay-modal@4x.png b/src/quickcontrols/imagine/images/drawer-overlay-modal@4x.png
new file mode 100644
index 0000000000..b92e600dae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay-modal@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay.png b/src/quickcontrols/imagine/images/drawer-overlay.png
new file mode 100644
index 0000000000..b7da23c00f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay@2x.png b/src/quickcontrols/imagine/images/drawer-overlay@2x.png
new file mode 100644
index 0000000000..23828d5a1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay@3x.png b/src/quickcontrols/imagine/images/drawer-overlay@3x.png
new file mode 100644
index 0000000000..d9d5382867
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/drawer-overlay@4x.png b/src/quickcontrols/imagine/images/drawer-overlay@4x.png
new file mode 100644
index 0000000000..a76c1a3a71
--- /dev/null
+++ b/src/quickcontrols/imagine/images/drawer-overlay@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/frame-background.9.png b/src/quickcontrols/imagine/images/frame-background.9.png
new file mode 100644
index 0000000000..8674059de8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/frame-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/frame-background@2x.9.png b/src/quickcontrols/imagine/images/frame-background@2x.9.png
new file mode 100644
index 0000000000..196614964a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/frame-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/frame-background@3x.9.png b/src/quickcontrols/imagine/images/frame-background@3x.9.png
new file mode 100644
index 0000000000..07d644be96
--- /dev/null
+++ b/src/quickcontrols/imagine/images/frame-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/frame-background@4x.9.png b/src/quickcontrols/imagine/images/frame-background@4x.9.png
new file mode 100644
index 0000000000..8bf47d2a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/frame-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-background.9.png b/src/quickcontrols/imagine/images/groupbox-background.9.png
new file mode 100644
index 0000000000..8674059de8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-background@2x.9.png b/src/quickcontrols/imagine/images/groupbox-background@2x.9.png
new file mode 100644
index 0000000000..196614964a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-background@3x.9.png b/src/quickcontrols/imagine/images/groupbox-background@3x.9.png
new file mode 100644
index 0000000000..07d644be96
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-background@4x.9.png b/src/quickcontrols/imagine/images/groupbox-background@4x.9.png
new file mode 100644
index 0000000000..8bf47d2a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-title.9.png b/src/quickcontrols/imagine/images/groupbox-title.9.png
new file mode 100644
index 0000000000..e85e0cb135
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-title.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-title@2x.9.png b/src/quickcontrols/imagine/images/groupbox-title@2x.9.png
new file mode 100644
index 0000000000..d5359d857d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-title@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-title@3x.9.png b/src/quickcontrols/imagine/images/groupbox-title@3x.9.png
new file mode 100644
index 0000000000..0e4b5c9f9f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-title@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/groupbox-title@4x.9.png b/src/quickcontrols/imagine/images/groupbox-title@4x.9.png
new file mode 100644
index 0000000000..908dfe6b90
--- /dev/null
+++ b/src/quickcontrols/imagine/images/groupbox-title@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-disabled.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-disabled.9.png
new file mode 100644
index 0000000000..23570729d6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@2x.9.png
new file mode 100644
index 0000000000..c7abb65c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@3x.9.png
new file mode 100644
index 0000000000..46b84d7da4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f4dfd338f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-focused.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-focused.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-focused@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-focused@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-focused@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-focused@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-focused@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-focused@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-highlighted.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted.9.png
new file mode 100644
index 0000000000..e79d8e1d01
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..ea68d35fc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..6d61041599
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..590cca96a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-hovered.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-hovered.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-pressed.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-pressed.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background.9.png b/src/quickcontrols/imagine/images/itemdelegate-background.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background@2x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background@3x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/itemdelegate-background@4x.9.png b/src/quickcontrols/imagine/images/itemdelegate-background@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/itemdelegate-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menu-background.9.png b/src/quickcontrols/imagine/images/menu-background.9.png
new file mode 100644
index 0000000000..3195fbc336
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menu-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menu-background@2x.9.png b/src/quickcontrols/imagine/images/menu-background@2x.9.png
new file mode 100644
index 0000000000..454c347ced
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menu-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menu-background@3x.9.png b/src/quickcontrols/imagine/images/menu-background@3x.9.png
new file mode 100644
index 0000000000..32ed60860f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menu-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menu-background@4x.9.png b/src/quickcontrols/imagine/images/menu-background@4x.9.png
new file mode 100644
index 0000000000..948cc3e95f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menu-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-disabled.png b/src/quickcontrols/imagine/images/menuitem-arrow-disabled.png
new file mode 100644
index 0000000000..6cad53f6c8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-disabled@2x.png b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@2x.png
new file mode 100644
index 0000000000..bad6fe8c0f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-disabled@3x.png b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@3x.png
new file mode 100644
index 0000000000..da420091a9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-disabled@4x.png b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@4x.png
new file mode 100644
index 0000000000..2d8e44e2f6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled.png
new file mode 100644
index 0000000000..44ac277145
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@2x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@2x.png
new file mode 100644
index 0000000000..71a9b88a80
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@3x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@3x.png
new file mode 100644
index 0000000000..1e03f2156e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@4x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@4x.png
new file mode 100644
index 0000000000..0f85b409d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored.png
new file mode 100644
index 0000000000..4ac1160bf2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@2x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@2x.png
new file mode 100644
index 0000000000..79b089b654
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@3x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@3x.png
new file mode 100644
index 0000000000..aeb191fdd5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@4x.png b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@4x.png
new file mode 100644
index 0000000000..139fab35e0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow-mirrored@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow.png b/src/quickcontrols/imagine/images/menuitem-arrow.png
new file mode 100644
index 0000000000..edf1f6bd1a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow@2x.png b/src/quickcontrols/imagine/images/menuitem-arrow@2x.png
new file mode 100644
index 0000000000..8e6292653e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow@3x.png b/src/quickcontrols/imagine/images/menuitem-arrow@3x.png
new file mode 100644
index 0000000000..0cef53acf5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-arrow@4x.png b/src/quickcontrols/imagine/images/menuitem-arrow@4x.png
new file mode 100644
index 0000000000..dbdc83bc16
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-arrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background-highlighted.9.png b/src/quickcontrols/imagine/images/menuitem-background-highlighted.9.png
new file mode 100644
index 0000000000..7b8fa0f42f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/menuitem-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..9edc30793b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/menuitem-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..183f6194ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/menuitem-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..0a1ab8637d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background.9.png b/src/quickcontrols/imagine/images/menuitem-background.9.png
new file mode 100644
index 0000000000..aab131eddf
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background@2x.9.png b/src/quickcontrols/imagine/images/menuitem-background@2x.9.png
new file mode 100644
index 0000000000..c46938c4d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background@3x.9.png b/src/quickcontrols/imagine/images/menuitem-background@3x.9.png
new file mode 100644
index 0000000000..bac1a83f7f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-background@4x.9.png b/src/quickcontrols/imagine/images/menuitem-background@4x.9.png
new file mode 100644
index 0000000000..ba77504c27
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered.png
new file mode 100644
index 0000000000..d55a520426
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..7289f63949
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..02d6cdf205
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..3f074dbfa9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed.png
new file mode 100644
index 0000000000..9c03d096e4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..680ba3efca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..974205de54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..2c8b6aabf4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked.png
new file mode 100644
index 0000000000..598b163aaa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked@2x.png
new file mode 100644
index 0000000000..06382264f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked@3x.png
new file mode 100644
index 0000000000..12a32dcd20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-checked@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-checked@4x.png
new file mode 100644
index 0000000000..4bc6701d65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-disabled.png b/src/quickcontrols/imagine/images/menuitem-indicator-disabled.png
new file mode 100644
index 0000000000..0a499f8f2d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@2x.png
new file mode 100644
index 0000000000..db652c5ac9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@3x.png
new file mode 100644
index 0000000000..482f045d32
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@4x.png
new file mode 100644
index 0000000000..a386e27251
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-focused.png b/src/quickcontrols/imagine/images/menuitem-indicator-focused.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-focused@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-focused@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-focused@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-focused@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-focused@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-focused@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-hovered.png b/src/quickcontrols/imagine/images/menuitem-indicator-hovered.png
new file mode 100644
index 0000000000..c5eb85276d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@2x.png
new file mode 100644
index 0000000000..8496fb1a88
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@3x.png
new file mode 100644
index 0000000000..30849fd0f0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@4x.png
new file mode 100644
index 0000000000..55ce7c0c1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-pressed.png b/src/quickcontrols/imagine/images/menuitem-indicator-pressed.png
new file mode 100644
index 0000000000..a1baaf903e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@2x.png
new file mode 100644
index 0000000000..81a7c3647a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@3x.png
new file mode 100644
index 0000000000..9325de38cb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@4x.png
new file mode 100644
index 0000000000..c93b8fb8a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator.png b/src/quickcontrols/imagine/images/menuitem-indicator.png
new file mode 100644
index 0000000000..2b3e2323d7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator@2x.png b/src/quickcontrols/imagine/images/menuitem-indicator@2x.png
new file mode 100644
index 0000000000..ce8985dbb1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator@3x.png b/src/quickcontrols/imagine/images/menuitem-indicator@3x.png
new file mode 100644
index 0000000000..2968731dd7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuitem-indicator@4x.png b/src/quickcontrols/imagine/images/menuitem-indicator@4x.png
new file mode 100644
index 0000000000..ea8da28498
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuitem-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuseparator-separator.9.png b/src/quickcontrols/imagine/images/menuseparator-separator.9.png
new file mode 100644
index 0000000000..b8825b99ca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuseparator-separator.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuseparator-separator@2x.9.png b/src/quickcontrols/imagine/images/menuseparator-separator@2x.9.png
new file mode 100644
index 0000000000..3e5a023d76
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuseparator-separator@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuseparator-separator@3x.9.png b/src/quickcontrols/imagine/images/menuseparator-separator@3x.9.png
new file mode 100644
index 0000000000..abe775c7a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuseparator-separator@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/menuseparator-separator@4x.9.png b/src/quickcontrols/imagine/images/menuseparator-separator@4x.9.png
new file mode 100644
index 0000000000..164c8e3e22
--- /dev/null
+++ b/src/quickcontrols/imagine/images/menuseparator-separator@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/page-background.png b/src/quickcontrols/imagine/images/page-background.png
new file mode 100644
index 0000000000..2d8d70f288
--- /dev/null
+++ b/src/quickcontrols/imagine/images/page-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/page-background@2x.png b/src/quickcontrols/imagine/images/page-background@2x.png
new file mode 100644
index 0000000000..18fbaa4c63
--- /dev/null
+++ b/src/quickcontrols/imagine/images/page-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/page-background@3x.png b/src/quickcontrols/imagine/images/page-background@3x.png
new file mode 100644
index 0000000000..241232b1e0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/page-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/page-background@4x.png b/src/quickcontrols/imagine/images/page-background@4x.png
new file mode 100644
index 0000000000..8eb1b1ecc1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/page-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-current.png b/src/quickcontrols/imagine/images/pageindicator-delegate-current.png
new file mode 100644
index 0000000000..dc96d72326
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-current.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-current@2x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-current@2x.png
new file mode 100644
index 0000000000..3e0d794fd5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-current@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-current@3x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-current@3x.png
new file mode 100644
index 0000000000..397501a7db
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-current@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-current@4x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-current@4x.png
new file mode 100644
index 0000000000..f741a8963b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-current@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current.png
new file mode 100644
index 0000000000..848d4351a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@2x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@2x.png
new file mode 100644
index 0000000000..65b5a9d42f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@3x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@3x.png
new file mode 100644
index 0000000000..99e3b644aa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@4x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@4x.png
new file mode 100644
index 0000000000..f1801fffef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled-current@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled.png
new file mode 100644
index 0000000000..848d4351a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@2x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@2x.png
new file mode 100644
index 0000000000..65b5a9d42f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@3x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@3x.png
new file mode 100644
index 0000000000..99e3b644aa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@4x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@4x.png
new file mode 100644
index 0000000000..f1801fffef
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-pressed.png b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed.png
new file mode 100644
index 0000000000..dc96d72326
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@2x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@2x.png
new file mode 100644
index 0000000000..3e0d794fd5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@3x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@3x.png
new file mode 100644
index 0000000000..397501a7db
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@4x.png b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@4x.png
new file mode 100644
index 0000000000..f741a8963b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate.png b/src/quickcontrols/imagine/images/pageindicator-delegate.png
new file mode 100644
index 0000000000..84d23cd1ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate@2x.png b/src/quickcontrols/imagine/images/pageindicator-delegate@2x.png
new file mode 100644
index 0000000000..0e706372c2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate@3x.png b/src/quickcontrols/imagine/images/pageindicator-delegate@3x.png
new file mode 100644
index 0000000000..85af5a4e4b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pageindicator-delegate@4x.png b/src/quickcontrols/imagine/images/pageindicator-delegate@4x.png
new file mode 100644
index 0000000000..0aacbab1a9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pageindicator-delegate@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pane-background.9.png b/src/quickcontrols/imagine/images/pane-background.9.png
new file mode 100644
index 0000000000..658f4863ea
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pane-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pane-background@2x.9.png b/src/quickcontrols/imagine/images/pane-background@2x.9.png
new file mode 100644
index 0000000000..a84ac04a1f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pane-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pane-background@3x.9.png b/src/quickcontrols/imagine/images/pane-background@3x.9.png
new file mode 100644
index 0000000000..2b1c4da9de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pane-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/pane-background@4x.9.png b/src/quickcontrols/imagine/images/pane-background@4x.9.png
new file mode 100644
index 0000000000..90295db412
--- /dev/null
+++ b/src/quickcontrols/imagine/images/pane-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-background.9.png b/src/quickcontrols/imagine/images/popup-background.9.png
new file mode 100644
index 0000000000..c842b5ff58
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-background@2x.9.png b/src/quickcontrols/imagine/images/popup-background@2x.9.png
new file mode 100644
index 0000000000..ca23df1f0d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-background@3x.9.png b/src/quickcontrols/imagine/images/popup-background@3x.9.png
new file mode 100644
index 0000000000..46cd406536
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-background@4x.9.png b/src/quickcontrols/imagine/images/popup-background@4x.9.png
new file mode 100644
index 0000000000..3da74119cc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay-modal.png b/src/quickcontrols/imagine/images/popup-overlay-modal.png
new file mode 100644
index 0000000000..d4a43d1c70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay-modal.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay-modal@2x.png b/src/quickcontrols/imagine/images/popup-overlay-modal@2x.png
new file mode 100644
index 0000000000..c9a8f4124b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay-modal@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay-modal@3x.png b/src/quickcontrols/imagine/images/popup-overlay-modal@3x.png
new file mode 100644
index 0000000000..4a1084a919
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay-modal@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay-modal@4x.png b/src/quickcontrols/imagine/images/popup-overlay-modal@4x.png
new file mode 100644
index 0000000000..b92e600dae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay-modal@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay.png b/src/quickcontrols/imagine/images/popup-overlay.png
new file mode 100644
index 0000000000..b7da23c00f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay@2x.png b/src/quickcontrols/imagine/images/popup-overlay@2x.png
new file mode 100644
index 0000000000..23828d5a1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay@3x.png b/src/quickcontrols/imagine/images/popup-overlay@3x.png
new file mode 100644
index 0000000000..d9d5382867
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/popup-overlay@4x.png b/src/quickcontrols/imagine/images/popup-overlay@4x.png
new file mode 100644
index 0000000000..a76c1a3a71
--- /dev/null
+++ b/src/quickcontrols/imagine/images/popup-overlay@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-animation.webp b/src/quickcontrols/imagine/images/progressbar-animation.webp
new file mode 100644
index 0000000000..51c35c8823
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-animation.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-animation@2x.webp b/src/quickcontrols/imagine/images/progressbar-animation@2x.webp
new file mode 100644
index 0000000000..ee1206302a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-animation@2x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-animation@3x.webp b/src/quickcontrols/imagine/images/progressbar-animation@3x.webp
new file mode 100644
index 0000000000..c2f94a74a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-animation@3x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-animation@4x.webp b/src/quickcontrols/imagine/images/progressbar-animation@4x.webp
new file mode 100644
index 0000000000..d49657e934
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-animation@4x.webp
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-background.9.png b/src/quickcontrols/imagine/images/progressbar-background.9.png
new file mode 100644
index 0000000000..e1760070b3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-background@2x.9.png b/src/quickcontrols/imagine/images/progressbar-background@2x.9.png
new file mode 100644
index 0000000000..e69922d57e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-background@3x.9.png b/src/quickcontrols/imagine/images/progressbar-background@3x.9.png
new file mode 100644
index 0000000000..b3c43205c3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-background@4x.9.png b/src/quickcontrols/imagine/images/progressbar-background@4x.9.png
new file mode 100644
index 0000000000..905bdc328f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-mask.9.png b/src/quickcontrols/imagine/images/progressbar-mask.9.png
new file mode 100644
index 0000000000..35a47dc807
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-mask.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-mask@2x.9.png b/src/quickcontrols/imagine/images/progressbar-mask@2x.9.png
new file mode 100644
index 0000000000..23ed1a8cf1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-mask@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-mask@3x.9.png b/src/quickcontrols/imagine/images/progressbar-mask@3x.9.png
new file mode 100644
index 0000000000..25bc843e3a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-mask@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-mask@4x.9.png b/src/quickcontrols/imagine/images/progressbar-mask@4x.9.png
new file mode 100644
index 0000000000..645ff20179
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-mask@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-progress.png b/src/quickcontrols/imagine/images/progressbar-progress.png
new file mode 100644
index 0000000000..bb31dc9b14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-progress.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-progress@2x.png b/src/quickcontrols/imagine/images/progressbar-progress@2x.png
new file mode 100644
index 0000000000..6bb464c90b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-progress@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-progress@3x.png b/src/quickcontrols/imagine/images/progressbar-progress@3x.png
new file mode 100644
index 0000000000..d514c72772
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-progress@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/progressbar-progress@4x.png b/src/quickcontrols/imagine/images/progressbar-progress@4x.png
new file mode 100644
index 0000000000..abc8fa6753
--- /dev/null
+++ b/src/quickcontrols/imagine/images/progressbar-progress@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused.png
new file mode 100644
index 0000000000..2f9e5e18e9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..47ec553423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..26cdebf817
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..708e286ea7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered.png
new file mode 100644
index 0000000000..2f9e5e18e9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..47ec553423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..26cdebf817
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..708e286ea7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed.png
new file mode 100644
index 0000000000..1e5ebca46a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..6eaae9bf3e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..e54a1624d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..7a7850bada
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked.png
new file mode 100644
index 0000000000..83c8562379
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@2x.png
new file mode 100644
index 0000000000..4bdeb4566e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@3x.png
new file mode 100644
index 0000000000..2230a8ce09
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-checked@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@4x.png
new file mode 100644
index 0000000000..e3dce04e56
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-disabled.png b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled.png
new file mode 100644
index 0000000000..05b8bfcadb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@2x.png
new file mode 100644
index 0000000000..e26fa5de81
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@3x.png
new file mode 100644
index 0000000000..c47e8c7d13
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@4x.png
new file mode 100644
index 0000000000..bc66dde78d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-focused.png b/src/quickcontrols/imagine/images/radiobutton-indicator-focused.png
new file mode 100644
index 0000000000..3001638d37
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-focused@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@2x.png
new file mode 100644
index 0000000000..b98907149e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-focused@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@3x.png
new file mode 100644
index 0000000000..b6221277d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-focused@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@4x.png
new file mode 100644
index 0000000000..49ae2206ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-hovered.png b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered.png
new file mode 100644
index 0000000000..3001638d37
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@2x.png
new file mode 100644
index 0000000000..b98907149e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@3x.png
new file mode 100644
index 0000000000..b6221277d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@4x.png
new file mode 100644
index 0000000000..49ae2206ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-pressed.png b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed.png
new file mode 100644
index 0000000000..76c7b4ed7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@2x.png
new file mode 100644
index 0000000000..d5d4cac6d1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@3x.png
new file mode 100644
index 0000000000..ca2a1ed169
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@4x.png
new file mode 100644
index 0000000000..1cb753d72f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator.png b/src/quickcontrols/imagine/images/radiobutton-indicator.png
new file mode 100644
index 0000000000..c05d4bfc05
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator@2x.png b/src/quickcontrols/imagine/images/radiobutton-indicator@2x.png
new file mode 100644
index 0000000000..62744d2726
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator@3x.png b/src/quickcontrols/imagine/images/radiobutton-indicator@3x.png
new file mode 100644
index 0000000000..fa5d241e70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiobutton-indicator@4x.png b/src/quickcontrols/imagine/images/radiobutton-indicator@4x.png
new file mode 100644
index 0000000000..7db85e9432
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiobutton-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-disabled.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-disabled.9.png
new file mode 100644
index 0000000000..23570729d6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@2x.9.png
new file mode 100644
index 0000000000..c7abb65c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@3x.9.png
new file mode 100644
index 0000000000..46b84d7da4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f4dfd338f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-focused.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-focused.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-focused@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-focused@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-focused@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-focused@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-focused@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-focused@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-highlighted.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted.9.png
new file mode 100644
index 0000000000..e79d8e1d01
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..ea68d35fc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..6d61041599
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..590cca96a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-hovered.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-hovered.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-pressed.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-pressed.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background.9.png b/src/quickcontrols/imagine/images/radiodelegate-background.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background@2x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background@3x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-background@4x.9.png b/src/quickcontrols/imagine/images/radiodelegate-background@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused.png
new file mode 100644
index 0000000000..2f9e5e18e9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..47ec553423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..26cdebf817
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..708e286ea7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered.png
new file mode 100644
index 0000000000..2f9e5e18e9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..47ec553423
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..26cdebf817
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..708e286ea7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed.png
new file mode 100644
index 0000000000..1e5ebca46a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..6eaae9bf3e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..e54a1624d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..7a7850bada
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked.png
new file mode 100644
index 0000000000..83c8562379
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@2x.png
new file mode 100644
index 0000000000..4bdeb4566e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@3x.png
new file mode 100644
index 0000000000..2230a8ce09
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@4x.png
new file mode 100644
index 0000000000..e3dce04e56
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled.png
new file mode 100644
index 0000000000..05b8bfcadb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@2x.png
new file mode 100644
index 0000000000..e26fa5de81
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@3x.png
new file mode 100644
index 0000000000..c47e8c7d13
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@4x.png
new file mode 100644
index 0000000000..bc66dde78d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-focused.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused.png
new file mode 100644
index 0000000000..3001638d37
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@2x.png
new file mode 100644
index 0000000000..b98907149e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@3x.png
new file mode 100644
index 0000000000..b6221277d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@4x.png
new file mode 100644
index 0000000000..49ae2206ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered.png
new file mode 100644
index 0000000000..3001638d37
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@2x.png
new file mode 100644
index 0000000000..b98907149e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@3x.png
new file mode 100644
index 0000000000..b6221277d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@4x.png
new file mode 100644
index 0000000000..49ae2206ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed.png
new file mode 100644
index 0000000000..76c7b4ed7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@2x.png
new file mode 100644
index 0000000000..d5d4cac6d1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@3x.png
new file mode 100644
index 0000000000..ca2a1ed169
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@4x.png
new file mode 100644
index 0000000000..1cb753d72f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator.png b/src/quickcontrols/imagine/images/radiodelegate-indicator.png
new file mode 100644
index 0000000000..c05d4bfc05
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator@2x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator@2x.png
new file mode 100644
index 0000000000..62744d2726
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator@3x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator@3x.png
new file mode 100644
index 0000000000..fa5d241e70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/radiodelegate-indicator@4x.png b/src/quickcontrols/imagine/images/radiodelegate-indicator@4x.png
new file mode 100644
index 0000000000..7db85e9432
--- /dev/null
+++ b/src/quickcontrols/imagine/images/radiodelegate-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-horizontal.9.png b/src/quickcontrols/imagine/images/rangeslider-background-horizontal.9.png
new file mode 100644
index 0000000000..c4e957ad1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-horizontal@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@2x.9.png
new file mode 100644
index 0000000000..6d8391130b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-horizontal@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@3x.9.png
new file mode 100644
index 0000000000..6b2e634c97
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-horizontal@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@4x.9.png
new file mode 100644
index 0000000000..969c791a38
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-horizontal@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-vertical.9.png b/src/quickcontrols/imagine/images/rangeslider-background-vertical.9.png
new file mode 100644
index 0000000000..f76e0b21f2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-vertical@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-vertical@2x.9.png
new file mode 100644
index 0000000000..fecd0ab2ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-vertical@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-vertical@3x.9.png
new file mode 100644
index 0000000000..77a9c830a5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-background-vertical@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-background-vertical@4x.9.png
new file mode 100644
index 0000000000..f1613684c0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-background-vertical@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-disabled.png b/src/quickcontrols/imagine/images/rangeslider-handle-disabled.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-disabled@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-disabled@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-disabled@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered.png
new file mode 100644
index 0000000000..c2958f1b3d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@2x.png
new file mode 100644
index 0000000000..12a4d1f83f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@3x.png
new file mode 100644
index 0000000000..1696ac9507
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@4x.png
new file mode 100644
index 0000000000..e1d1305623
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed.png
new file mode 100644
index 0000000000..c2958f1b3d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@2x.png
new file mode 100644
index 0000000000..12a4d1f83f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@3x.png
new file mode 100644
index 0000000000..1696ac9507
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@4x.png
new file mode 100644
index 0000000000..e1d1305623
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused.png
new file mode 100644
index 0000000000..bdf8239a46
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused@2x.png
new file mode 100644
index 0000000000..9f887c5ea1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused@3x.png
new file mode 100644
index 0000000000..8042d4c2a2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-focused@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-focused@4x.png
new file mode 100644
index 0000000000..e7e68c47e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-hovered.png b/src/quickcontrols/imagine/images/rangeslider-handle-hovered.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-hovered@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-hovered@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-hovered@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-pressed.png b/src/quickcontrols/imagine/images/rangeslider-handle-pressed.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-pressed@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-pressed@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle-pressed@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle.png b/src/quickcontrols/imagine/images/rangeslider-handle.png
new file mode 100644
index 0000000000..fd72dedfb0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle@2x.png b/src/quickcontrols/imagine/images/rangeslider-handle@2x.png
new file mode 100644
index 0000000000..57eed9f8ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle@3x.png b/src/quickcontrols/imagine/images/rangeslider-handle@3x.png
new file mode 100644
index 0000000000..e217a6444f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-handle@4x.png b/src/quickcontrols/imagine/images/rangeslider-handle@4x.png
new file mode 100644
index 0000000000..c212b59f55
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled.9.png
new file mode 100644
index 0000000000..7f7e6b935a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png
new file mode 100644
index 0000000000..cbf6fb6352
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png
new file mode 100644
index 0000000000..643776b8c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png
new file mode 100644
index 0000000000..d64acb904d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal.9.png
new file mode 100644
index 0000000000..43192f5416
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@2x.9.png
new file mode 100644
index 0000000000..ebbbbf82f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@3x.9.png
new file mode 100644
index 0000000000..0a029b53e4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@4x.9.png
new file mode 100644
index 0000000000..a13541691a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-horizontal@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled.9.png
new file mode 100644
index 0000000000..a4edafc971
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png
new file mode 100644
index 0000000000..8c38226e61
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png
new file mode 100644
index 0000000000..a939bffde8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png
new file mode 100644
index 0000000000..9f653770e2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical.9.png
new file mode 100644
index 0000000000..d3e877fc34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical@2x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@2x.9.png
new file mode 100644
index 0000000000..7790050e64
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical@3x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@3x.9.png
new file mode 100644
index 0000000000..039d198751
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/rangeslider-progress-vertical@4x.9.png b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@4x.9.png
new file mode 100644
index 0000000000..b3051d1f46
--- /dev/null
+++ b/src/quickcontrols/imagine/images/rangeslider-progress-vertical@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-focused.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused.png
new file mode 100644
index 0000000000..032a7caa65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@2x.png
new file mode 100644
index 0000000000..a2944b6ac8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@3x.png
new file mode 100644
index 0000000000..ffd4d210c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@4x.png
new file mode 100644
index 0000000000..35a41fc502
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered.png
new file mode 100644
index 0000000000..032a7caa65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@2x.png
new file mode 100644
index 0000000000..a2944b6ac8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@3x.png
new file mode 100644
index 0000000000..ffd4d210c4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@4x.png
new file mode 100644
index 0000000000..35a41fc502
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked.png b/src/quickcontrols/imagine/images/roundbutton-background-checked.png
new file mode 100644
index 0000000000..d57d3894fa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked@2x.png
new file mode 100644
index 0000000000..7c37452818
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked@3x.png
new file mode 100644
index 0000000000..b0e0b9bebd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-checked@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-checked@4x.png
new file mode 100644
index 0000000000..748864efb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked.png
new file mode 100644
index 0000000000..e26fa5de81
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@2x.png
new file mode 100644
index 0000000000..bc66dde78d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@3x.png
new file mode 100644
index 0000000000..a0c5f9ad4f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@4x.png
new file mode 100644
index 0000000000..190210c8f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled.png
new file mode 100644
index 0000000000..e26fa5de81
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled@2x.png
new file mode 100644
index 0000000000..bc66dde78d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled@3x.png
new file mode 100644
index 0000000000..a0c5f9ad4f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-disabled@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-disabled@4x.png
new file mode 100644
index 0000000000..190210c8f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-focused.png b/src/quickcontrols/imagine/images/roundbutton-background-focused.png
new file mode 100644
index 0000000000..832955c4e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-focused@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-focused@2x.png
new file mode 100644
index 0000000000..bb1ed2ac4b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-focused@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-focused@3x.png
new file mode 100644
index 0000000000..cbf0291321
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-focused@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-focused@4x.png
new file mode 100644
index 0000000000..1c765dee15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused.png
new file mode 100644
index 0000000000..269a9d52d5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@2x.png
new file mode 100644
index 0000000000..bd79565126
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@3x.png
new file mode 100644
index 0000000000..5ed0f662b4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@4x.png
new file mode 100644
index 0000000000..5bbb8e7afb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered.png
new file mode 100644
index 0000000000..269a9d52d5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@2x.png
new file mode 100644
index 0000000000..bd79565126
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@3x.png
new file mode 100644
index 0000000000..5ed0f662b4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@4x.png
new file mode 100644
index 0000000000..5bbb8e7afb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed.png
new file mode 100644
index 0000000000..a0fa8df033
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@2x.png
new file mode 100644
index 0000000000..3082a1d9c6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@3x.png
new file mode 100644
index 0000000000..d32e8af040
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@4x.png
new file mode 100644
index 0000000000..f4916e0bca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted.png
new file mode 100644
index 0000000000..f90e29f9cf
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@2x.png
new file mode 100644
index 0000000000..7dce11b40d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@3x.png
new file mode 100644
index 0000000000..436abbddce
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-highlighted@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@4x.png
new file mode 100644
index 0000000000..e728d6fa1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-highlighted@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-hovered.png b/src/quickcontrols/imagine/images/roundbutton-background-hovered.png
new file mode 100644
index 0000000000..832955c4e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-hovered@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-hovered@2x.png
new file mode 100644
index 0000000000..bb1ed2ac4b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-hovered@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-hovered@3x.png
new file mode 100644
index 0000000000..cbf0291321
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-hovered@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-hovered@4x.png
new file mode 100644
index 0000000000..1c765dee15
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-pressed.png b/src/quickcontrols/imagine/images/roundbutton-background-pressed.png
new file mode 100644
index 0000000000..d57d3894fa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-pressed@2x.png b/src/quickcontrols/imagine/images/roundbutton-background-pressed@2x.png
new file mode 100644
index 0000000000..7c37452818
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-pressed@3x.png b/src/quickcontrols/imagine/images/roundbutton-background-pressed@3x.png
new file mode 100644
index 0000000000..b0e0b9bebd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background-pressed@4x.png b/src/quickcontrols/imagine/images/roundbutton-background-pressed@4x.png
new file mode 100644
index 0000000000..748864efb3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background.png b/src/quickcontrols/imagine/images/roundbutton-background.png
new file mode 100644
index 0000000000..d5d4cac6d1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background@2x.png b/src/quickcontrols/imagine/images/roundbutton-background@2x.png
new file mode 100644
index 0000000000..1cb753d72f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background@3x.png b/src/quickcontrols/imagine/images/roundbutton-background@3x.png
new file mode 100644
index 0000000000..6cc304bf42
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/roundbutton-background@4x.png b/src/quickcontrols/imagine/images/roundbutton-background@4x.png
new file mode 100644
index 0000000000..56ea82f6de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/roundbutton-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-disabled.png b/src/quickcontrols/imagine/images/scrollbar-handle-disabled.png
new file mode 100644
index 0000000000..b0b95bed99
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-disabled@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@2x.png
new file mode 100644
index 0000000000..8ab854b0a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-disabled@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@3x.png
new file mode 100644
index 0000000000..f3c97231f5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-disabled@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@4x.png
new file mode 100644
index 0000000000..325469b8d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled.png
new file mode 100644
index 0000000000..236002fff6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@2x.png
new file mode 100644
index 0000000000..abc3d2c05c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@3x.png
new file mode 100644
index 0000000000..e215cf5b7a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@4x.png
new file mode 100644
index 0000000000..c6ec0520bd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered.png
new file mode 100644
index 0000000000..19b48f1d49
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@2x.png
new file mode 100644
index 0000000000..8f5abb8494
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@3x.png
new file mode 100644
index 0000000000..73963d754c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@4x.png
new file mode 100644
index 0000000000..04d6131ec9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed.png
new file mode 100644
index 0000000000..f48f514df2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@2x.png
new file mode 100644
index 0000000000..e31820add9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@3x.png
new file mode 100644
index 0000000000..278ba90007
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@4x.png
new file mode 100644
index 0000000000..01e4e5c85b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive.png
new file mode 100644
index 0000000000..fd7832a6aa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@2x.png
new file mode 100644
index 0000000000..bd63a1b1e8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@3x.png
new file mode 100644
index 0000000000..3145295446
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle-interactive@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@4x.png
new file mode 100644
index 0000000000..6db4d81da9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle-interactive@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle.png b/src/quickcontrols/imagine/images/scrollbar-handle.png
new file mode 100644
index 0000000000..255f6c4d60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle@2x.png b/src/quickcontrols/imagine/images/scrollbar-handle@2x.png
new file mode 100644
index 0000000000..2b69cef6a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle@3x.png b/src/quickcontrols/imagine/images/scrollbar-handle@3x.png
new file mode 100644
index 0000000000..6fdfa487d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollbar-handle@4x.png b/src/quickcontrols/imagine/images/scrollbar-handle@4x.png
new file mode 100644
index 0000000000..cc3205f125
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollbar-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollindicator-handle.png b/src/quickcontrols/imagine/images/scrollindicator-handle.png
new file mode 100644
index 0000000000..255f6c4d60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollindicator-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollindicator-handle@2x.png b/src/quickcontrols/imagine/images/scrollindicator-handle@2x.png
new file mode 100644
index 0000000000..2b69cef6a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollindicator-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollindicator-handle@3x.png b/src/quickcontrols/imagine/images/scrollindicator-handle@3x.png
new file mode 100644
index 0000000000..6fdfa487d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollindicator-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/scrollindicator-handle@4x.png b/src/quickcontrols/imagine/images/scrollindicator-handle@4x.png
new file mode 100644
index 0000000000..cc3205f125
--- /dev/null
+++ b/src/quickcontrols/imagine/images/scrollindicator-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-horizontal.9.png b/src/quickcontrols/imagine/images/slider-background-horizontal.9.png
new file mode 100644
index 0000000000..c4e957ad1b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-horizontal@2x.9.png b/src/quickcontrols/imagine/images/slider-background-horizontal@2x.9.png
new file mode 100644
index 0000000000..6d8391130b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-horizontal@3x.9.png b/src/quickcontrols/imagine/images/slider-background-horizontal@3x.9.png
new file mode 100644
index 0000000000..6b2e634c97
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-horizontal@4x.9.png b/src/quickcontrols/imagine/images/slider-background-horizontal@4x.9.png
new file mode 100644
index 0000000000..969c791a38
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-horizontal@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-vertical.9.png b/src/quickcontrols/imagine/images/slider-background-vertical.9.png
new file mode 100644
index 0000000000..f76e0b21f2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-vertical@2x.9.png b/src/quickcontrols/imagine/images/slider-background-vertical@2x.9.png
new file mode 100644
index 0000000000..fecd0ab2ba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-vertical@3x.9.png b/src/quickcontrols/imagine/images/slider-background-vertical@3x.9.png
new file mode 100644
index 0000000000..77a9c830a5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-background-vertical@4x.9.png b/src/quickcontrols/imagine/images/slider-background-vertical@4x.9.png
new file mode 100644
index 0000000000..f1613684c0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-background-vertical@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-disabled.png b/src/quickcontrols/imagine/images/slider-handle-disabled.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-disabled@2x.png b/src/quickcontrols/imagine/images/slider-handle-disabled@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-disabled@3x.png b/src/quickcontrols/imagine/images/slider-handle-disabled@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-disabled@4x.png b/src/quickcontrols/imagine/images/slider-handle-disabled@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-hovered.png b/src/quickcontrols/imagine/images/slider-handle-focused-hovered.png
new file mode 100644
index 0000000000..c2958f1b3d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-hovered@2x.png b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@2x.png
new file mode 100644
index 0000000000..12a4d1f83f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-hovered@3x.png b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@3x.png
new file mode 100644
index 0000000000..1696ac9507
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-hovered@4x.png b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@4x.png
new file mode 100644
index 0000000000..e1d1305623
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-pressed.png b/src/quickcontrols/imagine/images/slider-handle-focused-pressed.png
new file mode 100644
index 0000000000..c2958f1b3d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-pressed@2x.png b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@2x.png
new file mode 100644
index 0000000000..12a4d1f83f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-pressed@3x.png b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@3x.png
new file mode 100644
index 0000000000..1696ac9507
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused-pressed@4x.png b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@4x.png
new file mode 100644
index 0000000000..e1d1305623
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused.png b/src/quickcontrols/imagine/images/slider-handle-focused.png
new file mode 100644
index 0000000000..bdf8239a46
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused@2x.png b/src/quickcontrols/imagine/images/slider-handle-focused@2x.png
new file mode 100644
index 0000000000..9f887c5ea1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused@3x.png b/src/quickcontrols/imagine/images/slider-handle-focused@3x.png
new file mode 100644
index 0000000000..8042d4c2a2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-focused@4x.png b/src/quickcontrols/imagine/images/slider-handle-focused@4x.png
new file mode 100644
index 0000000000..e7e68c47e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-hovered.png b/src/quickcontrols/imagine/images/slider-handle-hovered.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-hovered@2x.png b/src/quickcontrols/imagine/images/slider-handle-hovered@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-hovered@3x.png b/src/quickcontrols/imagine/images/slider-handle-hovered@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-hovered@4x.png b/src/quickcontrols/imagine/images/slider-handle-hovered@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-pressed.png b/src/quickcontrols/imagine/images/slider-handle-pressed.png
new file mode 100644
index 0000000000..4934fb77c5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-pressed@2x.png b/src/quickcontrols/imagine/images/slider-handle-pressed@2x.png
new file mode 100644
index 0000000000..451b719e60
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-pressed@3x.png b/src/quickcontrols/imagine/images/slider-handle-pressed@3x.png
new file mode 100644
index 0000000000..1daffca729
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle-pressed@4x.png b/src/quickcontrols/imagine/images/slider-handle-pressed@4x.png
new file mode 100644
index 0000000000..6483070710
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle.png b/src/quickcontrols/imagine/images/slider-handle.png
new file mode 100644
index 0000000000..fd72dedfb0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle@2x.png b/src/quickcontrols/imagine/images/slider-handle@2x.png
new file mode 100644
index 0000000000..57eed9f8ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle@3x.png b/src/quickcontrols/imagine/images/slider-handle@3x.png
new file mode 100644
index 0000000000..e217a6444f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-handle@4x.png b/src/quickcontrols/imagine/images/slider-handle@4x.png
new file mode 100644
index 0000000000..c212b59f55
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled.9.png
new file mode 100644
index 0000000000..7f7e6b935a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@2x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@2x.9.png
new file mode 100644
index 0000000000..cbf6fb6352
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@3x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@3x.9.png
new file mode 100644
index 0000000000..643776b8c9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@4x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@4x.9.png
new file mode 100644
index 0000000000..d64acb904d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal.9.png
new file mode 100644
index 0000000000..43192f5416
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal@2x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal@2x.9.png
new file mode 100644
index 0000000000..ebbbbf82f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal@3x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal@3x.9.png
new file mode 100644
index 0000000000..0a029b53e4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-horizontal@4x.9.png b/src/quickcontrols/imagine/images/slider-progress-horizontal@4x.9.png
new file mode 100644
index 0000000000..a13541691a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-horizontal@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical-disabled.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled.9.png
new file mode 100644
index 0000000000..a4edafc971
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@2x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@2x.9.png
new file mode 100644
index 0000000000..8c38226e61
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@3x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@3x.9.png
new file mode 100644
index 0000000000..a939bffde8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@4x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@4x.9.png
new file mode 100644
index 0000000000..9f653770e2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical.9.png
new file mode 100644
index 0000000000..d3e877fc34
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical@2x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical@2x.9.png
new file mode 100644
index 0000000000..7790050e64
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical@3x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical@3x.9.png
new file mode 100644
index 0000000000..039d198751
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/slider-progress-vertical@4x.9.png b/src/quickcontrols/imagine/images/slider-progress-vertical@4x.9.png
new file mode 100644
index 0000000000..b3051d1f46
--- /dev/null
+++ b/src/quickcontrols/imagine/images/slider-progress-vertical@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-disabled.9.png b/src/quickcontrols/imagine/images/spinbox-background-disabled.9.png
new file mode 100644
index 0000000000..7baaeec525
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/spinbox-background-disabled@2x.9.png
new file mode 100644
index 0000000000..e0d5907034
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/spinbox-background-disabled@3x.9.png
new file mode 100644
index 0000000000..24b3054ded
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/spinbox-background-disabled@4x.9.png
new file mode 100644
index 0000000000..8ac4740a7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-editable.9.png b/src/quickcontrols/imagine/images/spinbox-background-editable.9.png
new file mode 100644
index 0000000000..995c827659
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-editable.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-editable@2x.9.png b/src/quickcontrols/imagine/images/spinbox-background-editable@2x.9.png
new file mode 100644
index 0000000000..42c9dd6ba2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-editable@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-editable@3x.9.png b/src/quickcontrols/imagine/images/spinbox-background-editable@3x.9.png
new file mode 100644
index 0000000000..4ee974a144
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-editable@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-editable@4x.9.png b/src/quickcontrols/imagine/images/spinbox-background-editable@4x.9.png
new file mode 100644
index 0000000000..59b0091539
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-editable@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-focused.9.png b/src/quickcontrols/imagine/images/spinbox-background-focused.9.png
new file mode 100644
index 0000000000..27751eacc8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-background-focused@2x.9.png
new file mode 100644
index 0000000000..1692578f6c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-background-focused@3x.9.png
new file mode 100644
index 0000000000..4c44c1bbbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-background-focused@4x.9.png
new file mode 100644
index 0000000000..f8632bf2f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background.9.png b/src/quickcontrols/imagine/images/spinbox-background.9.png
new file mode 100644
index 0000000000..ae8b043beb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background@2x.9.png b/src/quickcontrols/imagine/images/spinbox-background@2x.9.png
new file mode 100644
index 0000000000..eaae097e2f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background@3x.9.png b/src/quickcontrols/imagine/images/spinbox-background@3x.9.png
new file mode 100644
index 0000000000..d8add8117c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-background@4x.9.png b/src/quickcontrols/imagine/images/spinbox-background@4x.9.png
new file mode 100644
index 0000000000..d954febfc2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled.9.png
new file mode 100644
index 0000000000..b3953398d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@2x.9.png
new file mode 100644
index 0000000000..18e2ca65d4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@3x.9.png
new file mode 100644
index 0000000000..ed6674b47b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@4x.9.png
new file mode 100644
index 0000000000..0da2cf93ff
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused.9.png
new file mode 100644
index 0000000000..46220a8ebe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png
new file mode 100644
index 0000000000..b8ebb7b7eb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png
new file mode 100644
index 0000000000..10561d8dbb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png
new file mode 100644
index 0000000000..ccd09d69a5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered.9.png
new file mode 100644
index 0000000000..46220a8ebe
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png
new file mode 100644
index 0000000000..b8ebb7b7eb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png
new file mode 100644
index 0000000000..10561d8dbb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png
new file mode 100644
index 0000000000..ccd09d69a5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png
new file mode 100644
index 0000000000..23842de4e6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png
new file mode 100644
index 0000000000..e50789323a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png
new file mode 100644
index 0000000000..7edec0c9b3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png
new file mode 100644
index 0000000000..f6e5ff8201
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png
new file mode 100644
index 0000000000..23842de4e6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png
new file mode 100644
index 0000000000..e50789323a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png
new file mode 100644
index 0000000000..7edec0c9b3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png
new file mode 100644
index 0000000000..f6e5ff8201
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png
new file mode 100644
index 0000000000..b6917a036b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png
new file mode 100644
index 0000000000..8999d3e441
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png
new file mode 100644
index 0000000000..77aa004465
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png
new file mode 100644
index 0000000000..4f2fd261ab
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored.9.png
new file mode 100644
index 0000000000..3c3da5b1a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png
new file mode 100644
index 0000000000..e0760e07cd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png
new file mode 100644
index 0000000000..c37080f5b8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png
new file mode 100644
index 0000000000..bdc248231a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-mirrored@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed.9.png
new file mode 100644
index 0000000000..65f2821bcd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png
new file mode 100644
index 0000000000..010dd9d0bb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png
new file mode 100644
index 0000000000..f647f489d2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png
new file mode 100644
index 0000000000..db0486d1fc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable.9.png
new file mode 100644
index 0000000000..c3207f311b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@2x.9.png
new file mode 100644
index 0000000000..c8c2630e83
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@3x.9.png
new file mode 100644
index 0000000000..d0a6c81816
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@4x.9.png
new file mode 100644
index 0000000000..40e897623b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-editable@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused.9.png
new file mode 100644
index 0000000000..6ad31bb0e2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@2x.9.png
new file mode 100644
index 0000000000..6cc60b4b54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@3x.9.png
new file mode 100644
index 0000000000..722c7ec708
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@4x.9.png
new file mode 100644
index 0000000000..64fa4ab6c0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered.9.png
new file mode 100644
index 0000000000..6ad31bb0e2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@2x.9.png
new file mode 100644
index 0000000000..6cc60b4b54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@3x.9.png
new file mode 100644
index 0000000000..722c7ec708
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@4x.9.png
new file mode 100644
index 0000000000..64fa4ab6c0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png
new file mode 100644
index 0000000000..ac7da20e65
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png
new file mode 100644
index 0000000000..a12f361535
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png
new file mode 100644
index 0000000000..de11317bc1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png
new file mode 100644
index 0000000000..8be41f3898
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused.9.png
new file mode 100644
index 0000000000..6b6e526436
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png
new file mode 100644
index 0000000000..e0c36da35d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png
new file mode 100644
index 0000000000..ca2389dac4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png
new file mode 100644
index 0000000000..7e6c547419
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png
new file mode 100644
index 0000000000..6b6e526436
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png
new file mode 100644
index 0000000000..e0c36da35d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png
new file mode 100644
index 0000000000..ca2389dac4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png
new file mode 100644
index 0000000000..7e6c547419
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png
new file mode 100644
index 0000000000..d756679feb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png
new file mode 100644
index 0000000000..e49c7e8985
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png
new file mode 100644
index 0000000000..6041ffdcc0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png
new file mode 100644
index 0000000000..e23dda155e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored.9.png
new file mode 100644
index 0000000000..58be212032
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@2x.9.png
new file mode 100644
index 0000000000..709a1ab6c6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@3x.9.png
new file mode 100644
index 0000000000..ee5b5b8225
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@4x.9.png
new file mode 100644
index 0000000000..1e88d44dba
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-mirrored@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed.9.png
new file mode 100644
index 0000000000..9703314b47
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@2x.9.png
new file mode 100644
index 0000000000..173eccfbe3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@3x.9.png
new file mode 100644
index 0000000000..77737c7593
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@4x.9.png
new file mode 100644
index 0000000000..6a2bb865cb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down.9.png
new file mode 100644
index 0000000000..a6c9679a43
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down@2x.9.png
new file mode 100644
index 0000000000..bd14cdbbfc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down@3x.9.png
new file mode 100644
index 0000000000..02d18c1d8e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-down@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-down@4x.9.png
new file mode 100644
index 0000000000..9ec1bf0459
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-down@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled.9.png
new file mode 100644
index 0000000000..5fe5ab6ad5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@2x.9.png
new file mode 100644
index 0000000000..f7a2a5d56d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@3x.9.png
new file mode 100644
index 0000000000..3244c93f14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@4x.9.png
new file mode 100644
index 0000000000..8248200559
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused.9.png
new file mode 100644
index 0000000000..d291c50a76
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png
new file mode 100644
index 0000000000..06e27b1b8e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png
new file mode 100644
index 0000000000..34b4373558
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png
new file mode 100644
index 0000000000..4a95cca469
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered.9.png
new file mode 100644
index 0000000000..d291c50a76
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png
new file mode 100644
index 0000000000..06e27b1b8e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png
new file mode 100644
index 0000000000..34b4373558
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png
new file mode 100644
index 0000000000..4a95cca469
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png
new file mode 100644
index 0000000000..a98d5a1d42
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png
new file mode 100644
index 0000000000..4b8458600a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png
new file mode 100644
index 0000000000..da241c07ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png
new file mode 100644
index 0000000000..d1333671ff
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png
new file mode 100644
index 0000000000..a98d5a1d42
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png
new file mode 100644
index 0000000000..4b8458600a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png
new file mode 100644
index 0000000000..da241c07ae
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png
new file mode 100644
index 0000000000..d1333671ff
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png
new file mode 100644
index 0000000000..793e009d82
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png
new file mode 100644
index 0000000000..aca00c57c0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png
new file mode 100644
index 0000000000..a49b95498c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png
new file mode 100644
index 0000000000..e0814f3be3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored.9.png
new file mode 100644
index 0000000000..ac4c46d184
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png
new file mode 100644
index 0000000000..b1c335ee53
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png
new file mode 100644
index 0000000000..3f0d9f2f25
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png
new file mode 100644
index 0000000000..cac6eca867
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-mirrored@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed.9.png
new file mode 100644
index 0000000000..87a1ae7a9a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png
new file mode 100644
index 0000000000..95c5ea063d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png
new file mode 100644
index 0000000000..3ed6cddfb8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png
new file mode 100644
index 0000000000..8f5e3f02bd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable.9.png
new file mode 100644
index 0000000000..b3cc7bea02
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@2x.9.png
new file mode 100644
index 0000000000..51313f5953
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@3x.9.png
new file mode 100644
index 0000000000..8db540f593
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@4x.9.png
new file mode 100644
index 0000000000..310400a2b5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-editable@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused.9.png
new file mode 100644
index 0000000000..d88bd00d22
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@2x.9.png
new file mode 100644
index 0000000000..77dbb52a6a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@3x.9.png
new file mode 100644
index 0000000000..0739b1b173
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@4x.9.png
new file mode 100644
index 0000000000..d53ee543e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered.9.png
new file mode 100644
index 0000000000..d88bd00d22
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@2x.9.png
new file mode 100644
index 0000000000..77dbb52a6a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@3x.9.png
new file mode 100644
index 0000000000..0739b1b173
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@4x.9.png
new file mode 100644
index 0000000000..d53ee543e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png
new file mode 100644
index 0000000000..53f6d7e59c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png
new file mode 100644
index 0000000000..7c7bb214af
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png
new file mode 100644
index 0000000000..5a69027cf3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png
new file mode 100644
index 0000000000..fe2171a546
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused.9.png
new file mode 100644
index 0000000000..cf31f93668
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png
new file mode 100644
index 0000000000..48b8861eac
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png
new file mode 100644
index 0000000000..d6a417202b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png
new file mode 100644
index 0000000000..e0c7e374ad
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png
new file mode 100644
index 0000000000..cf31f93668
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png
new file mode 100644
index 0000000000..48b8861eac
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png
new file mode 100644
index 0000000000..d6a417202b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png
new file mode 100644
index 0000000000..e0c7e374ad
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png
new file mode 100644
index 0000000000..4548cddd91
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png
new file mode 100644
index 0000000000..c5fb9d1b3d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png
new file mode 100644
index 0000000000..ffbe520a19
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png
new file mode 100644
index 0000000000..784f9bee96
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored.9.png
new file mode 100644
index 0000000000..f26794570d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@2x.9.png
new file mode 100644
index 0000000000..7f07e625ad
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@3x.9.png
new file mode 100644
index 0000000000..0b060816ec
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@4x.9.png
new file mode 100644
index 0000000000..df76dfcec1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-mirrored@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed.9.png
new file mode 100644
index 0000000000..cbba897fc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@2x.9.png
new file mode 100644
index 0000000000..a49e11fa4e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@3x.9.png
new file mode 100644
index 0000000000..720e454326
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@4x.9.png
new file mode 100644
index 0000000000..46333e3df8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up.9.png
new file mode 100644
index 0000000000..67cbe4345b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up@2x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up@2x.9.png
new file mode 100644
index 0000000000..8e804b8735
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up@3x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up@3x.9.png
new file mode 100644
index 0000000000..15baec74c8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/spinbox-indicator-up@4x.9.png b/src/quickcontrols/imagine/images/spinbox-indicator-up@4x.9.png
new file mode 100644
index 0000000000..7112de67e3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/spinbox-indicator-up@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-disabled.png b/src/quickcontrols/imagine/images/splitview-handle-disabled.png
new file mode 100644
index 0000000000..8ab854b0a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-disabled@2x.png b/src/quickcontrols/imagine/images/splitview-handle-disabled@2x.png
new file mode 100644
index 0000000000..325469b8d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-disabled@3x.png b/src/quickcontrols/imagine/images/splitview-handle-disabled@3x.png
new file mode 100644
index 0000000000..5357e84783
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-disabled@4x.png b/src/quickcontrols/imagine/images/splitview-handle-disabled@4x.png
new file mode 100644
index 0000000000..e215cf5b7a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-hovered.png b/src/quickcontrols/imagine/images/splitview-handle-hovered.png
new file mode 100644
index 0000000000..429d55081f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-hovered@2x.png b/src/quickcontrols/imagine/images/splitview-handle-hovered@2x.png
new file mode 100644
index 0000000000..6f17b06ef3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-hovered@3x.png b/src/quickcontrols/imagine/images/splitview-handle-hovered@3x.png
new file mode 100644
index 0000000000..11dcfa261c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-hovered@4x.png b/src/quickcontrols/imagine/images/splitview-handle-hovered@4x.png
new file mode 100644
index 0000000000..73963d754c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-pressed.png b/src/quickcontrols/imagine/images/splitview-handle-pressed.png
new file mode 100644
index 0000000000..6e00db20e6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-pressed@2x.png b/src/quickcontrols/imagine/images/splitview-handle-pressed@2x.png
new file mode 100644
index 0000000000..e1392de62b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-pressed@3x.png b/src/quickcontrols/imagine/images/splitview-handle-pressed@3x.png
new file mode 100644
index 0000000000..ff6a397f69
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle-pressed@4x.png b/src/quickcontrols/imagine/images/splitview-handle-pressed@4x.png
new file mode 100644
index 0000000000..278ba90007
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle.png b/src/quickcontrols/imagine/images/splitview-handle.png
new file mode 100644
index 0000000000..2b69cef6a3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle@2x.png b/src/quickcontrols/imagine/images/splitview-handle@2x.png
new file mode 100644
index 0000000000..cc3205f125
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle@3x.png b/src/quickcontrols/imagine/images/splitview-handle@3x.png
new file mode 100644
index 0000000000..b8be2b4d8f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/splitview-handle@4x.png b/src/quickcontrols/imagine/images/splitview-handle@4x.png
new file mode 100644
index 0000000000..3145295446
--- /dev/null
+++ b/src/quickcontrols/imagine/images/splitview-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-disabled.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-disabled.9.png
new file mode 100644
index 0000000000..23570729d6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@2x.9.png
new file mode 100644
index 0000000000..c7abb65c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@3x.9.png
new file mode 100644
index 0000000000..46b84d7da4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f4dfd338f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-focused.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-focused.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-focused@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-focused@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-focused@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-focused@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-focused@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-focused@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-highlighted.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted.9.png
new file mode 100644
index 0000000000..e79d8e1d01
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@2x.9.png
new file mode 100644
index 0000000000..ea68d35fc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@3x.9.png
new file mode 100644
index 0000000000..6d61041599
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@4x.9.png
new file mode 100644
index 0000000000..590cca96a1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-highlighted@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-hovered.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-hovered.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-pressed.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-pressed.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background.9.png b/src/quickcontrols/imagine/images/swipedelegate-background.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background@2x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background@3x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/swipedelegate-background@4x.9.png b/src/quickcontrols/imagine/images/swipedelegate-background@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/swipedelegate-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-disabled.png b/src/quickcontrols/imagine/images/switch-handle-disabled.png
new file mode 100644
index 0000000000..595dd5465d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-disabled@2x.png b/src/quickcontrols/imagine/images/switch-handle-disabled@2x.png
new file mode 100644
index 0000000000..5be736aafa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-disabled@3x.png b/src/quickcontrols/imagine/images/switch-handle-disabled@3x.png
new file mode 100644
index 0000000000..c8002ca3d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-disabled@4x.png b/src/quickcontrols/imagine/images/switch-handle-disabled@4x.png
new file mode 100644
index 0000000000..00e70c1ba5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-pressed.png b/src/quickcontrols/imagine/images/switch-handle-pressed.png
new file mode 100644
index 0000000000..595dd5465d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-pressed@2x.png b/src/quickcontrols/imagine/images/switch-handle-pressed@2x.png
new file mode 100644
index 0000000000..5be736aafa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-pressed@3x.png b/src/quickcontrols/imagine/images/switch-handle-pressed@3x.png
new file mode 100644
index 0000000000..c8002ca3d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle-pressed@4x.png b/src/quickcontrols/imagine/images/switch-handle-pressed@4x.png
new file mode 100644
index 0000000000..00e70c1ba5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle.png b/src/quickcontrols/imagine/images/switch-handle.png
new file mode 100644
index 0000000000..15649c34c7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle@2x.png b/src/quickcontrols/imagine/images/switch-handle@2x.png
new file mode 100644
index 0000000000..04f84ed920
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle@3x.png b/src/quickcontrols/imagine/images/switch-handle@3x.png
new file mode 100644
index 0000000000..e0cfb63718
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-handle@4x.png b/src/quickcontrols/imagine/images/switch-handle@4x.png
new file mode 100644
index 0000000000..73fa381a4a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-focused.png b/src/quickcontrols/imagine/images/switch-indicator-checked-focused.png
new file mode 100644
index 0000000000..7f5ba5dfc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..a0090df49f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..0c7e526459
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..3a5e1d36ca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered.png
new file mode 100644
index 0000000000..7f5ba5dfc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..a0090df49f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..0c7e526459
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..3a5e1d36ca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed.png
new file mode 100644
index 0000000000..ecbc552a17
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..07fe7241d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..8c65c27f4e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..f6a1e47658
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked.png b/src/quickcontrols/imagine/images/switch-indicator-checked.png
new file mode 100644
index 0000000000..2b7265cd0f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked@2x.png b/src/quickcontrols/imagine/images/switch-indicator-checked@2x.png
new file mode 100644
index 0000000000..6ec88c7fc8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked@3x.png b/src/quickcontrols/imagine/images/switch-indicator-checked@3x.png
new file mode 100644
index 0000000000..48c979856a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-checked@4x.png b/src/quickcontrols/imagine/images/switch-indicator-checked@4x.png
new file mode 100644
index 0000000000..e9f81807da
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-disabled.png b/src/quickcontrols/imagine/images/switch-indicator-disabled.png
new file mode 100644
index 0000000000..9cfab79197
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/switch-indicator-disabled@2x.png
new file mode 100644
index 0000000000..3bbbb8dfbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/switch-indicator-disabled@3x.png
new file mode 100644
index 0000000000..80d9a74685
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/switch-indicator-disabled@4x.png
new file mode 100644
index 0000000000..9ee7bfabbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-focused.png b/src/quickcontrols/imagine/images/switch-indicator-focused.png
new file mode 100644
index 0000000000..4867bcac54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-focused@2x.png b/src/quickcontrols/imagine/images/switch-indicator-focused@2x.png
new file mode 100644
index 0000000000..d833a0cdb4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-focused@3x.png b/src/quickcontrols/imagine/images/switch-indicator-focused@3x.png
new file mode 100644
index 0000000000..a632b6ae1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-focused@4x.png b/src/quickcontrols/imagine/images/switch-indicator-focused@4x.png
new file mode 100644
index 0000000000..b5affab772
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-hovered.png b/src/quickcontrols/imagine/images/switch-indicator-hovered.png
new file mode 100644
index 0000000000..4867bcac54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/switch-indicator-hovered@2x.png
new file mode 100644
index 0000000000..d833a0cdb4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/switch-indicator-hovered@3x.png
new file mode 100644
index 0000000000..a632b6ae1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/switch-indicator-hovered@4x.png
new file mode 100644
index 0000000000..b5affab772
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-pressed.png b/src/quickcontrols/imagine/images/switch-indicator-pressed.png
new file mode 100644
index 0000000000..4fbbc060e8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/switch-indicator-pressed@2x.png
new file mode 100644
index 0000000000..7939f943e5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/switch-indicator-pressed@3x.png
new file mode 100644
index 0000000000..adcbe45bb7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/switch-indicator-pressed@4x.png
new file mode 100644
index 0000000000..74c0c77e6f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator.png b/src/quickcontrols/imagine/images/switch-indicator.png
new file mode 100644
index 0000000000..b6b4f1cd79
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator@2x.png b/src/quickcontrols/imagine/images/switch-indicator@2x.png
new file mode 100644
index 0000000000..bfeedeb720
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator@3x.png b/src/quickcontrols/imagine/images/switch-indicator@3x.png
new file mode 100644
index 0000000000..19e5ba2ca7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switch-indicator@4x.png b/src/quickcontrols/imagine/images/switch-indicator@4x.png
new file mode 100644
index 0000000000..9345cd4fdb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switch-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-disabled.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-disabled.9.png
new file mode 100644
index 0000000000..23570729d6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@2x.9.png
new file mode 100644
index 0000000000..c7abb65c3f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@3x.9.png
new file mode 100644
index 0000000000..46b84d7da4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f4dfd338f9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-focused.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-focused.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-focused@2x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-focused@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-focused@3x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-focused@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-focused@4x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-focused@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-hovered.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-hovered.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-pressed.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-pressed.9.png
new file mode 100644
index 0000000000..6ae574d55a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@2x.9.png
new file mode 100644
index 0000000000..6b61562c14
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@3x.9.png
new file mode 100644
index 0000000000..e46c0bf1d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@4x.9.png
new file mode 100644
index 0000000000..010444e8e1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background.9.png b/src/quickcontrols/imagine/images/switchdelegate-background.9.png
new file mode 100644
index 0000000000..b8749743d0
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background@2x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background@2x.9.png
new file mode 100644
index 0000000000..5a136a0ca9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background@3x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background@3x.9.png
new file mode 100644
index 0000000000..f47a366b7b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-background@4x.9.png b/src/quickcontrols/imagine/images/switchdelegate-background@4x.9.png
new file mode 100644
index 0000000000..9ecb680f20
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-disabled.png b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled.png
new file mode 100644
index 0000000000..595dd5465d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@2x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@2x.png
new file mode 100644
index 0000000000..5be736aafa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@3x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@3x.png
new file mode 100644
index 0000000000..c8002ca3d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@4x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@4x.png
new file mode 100644
index 0000000000..00e70c1ba5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-pressed.png b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed.png
new file mode 100644
index 0000000000..595dd5465d
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@2x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@2x.png
new file mode 100644
index 0000000000..5be736aafa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@3x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@3x.png
new file mode 100644
index 0000000000..c8002ca3d9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@4x.png b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@4x.png
new file mode 100644
index 0000000000..00e70c1ba5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle.png b/src/quickcontrols/imagine/images/switchdelegate-handle.png
new file mode 100644
index 0000000000..15649c34c7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle@2x.png b/src/quickcontrols/imagine/images/switchdelegate-handle@2x.png
new file mode 100644
index 0000000000..04f84ed920
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle@3x.png b/src/quickcontrols/imagine/images/switchdelegate-handle@3x.png
new file mode 100644
index 0000000000..e0cfb63718
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-handle@4x.png b/src/quickcontrols/imagine/images/switchdelegate-handle@4x.png
new file mode 100644
index 0000000000..73fa381a4a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-handle@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused.png
new file mode 100644
index 0000000000..7f5ba5dfc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@2x.png
new file mode 100644
index 0000000000..a0090df49f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@3x.png
new file mode 100644
index 0000000000..0c7e526459
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@4x.png
new file mode 100644
index 0000000000..3a5e1d36ca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered.png
new file mode 100644
index 0000000000..7f5ba5dfc4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@2x.png
new file mode 100644
index 0000000000..a0090df49f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@3x.png
new file mode 100644
index 0000000000..0c7e526459
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@4x.png
new file mode 100644
index 0000000000..3a5e1d36ca
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed.png
new file mode 100644
index 0000000000..ecbc552a17
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@2x.png
new file mode 100644
index 0000000000..07fe7241d8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@3x.png
new file mode 100644
index 0000000000..8c65c27f4e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@4x.png
new file mode 100644
index 0000000000..f6a1e47658
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked.png
new file mode 100644
index 0000000000..2b7265cd0f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@2x.png
new file mode 100644
index 0000000000..6ec88c7fc8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@3x.png
new file mode 100644
index 0000000000..48c979856a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@4x.png
new file mode 100644
index 0000000000..e9f81807da
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-checked@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled.png
new file mode 100644
index 0000000000..9cfab79197
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@2x.png
new file mode 100644
index 0000000000..3bbbb8dfbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@3x.png
new file mode 100644
index 0000000000..80d9a74685
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@4x.png
new file mode 100644
index 0000000000..9ee7bfabbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-disabled@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-focused.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused.png
new file mode 100644
index 0000000000..4867bcac54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@2x.png
new file mode 100644
index 0000000000..d833a0cdb4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@3x.png
new file mode 100644
index 0000000000..a632b6ae1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@4x.png
new file mode 100644
index 0000000000..b5affab772
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-focused@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered.png
new file mode 100644
index 0000000000..4867bcac54
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@2x.png
new file mode 100644
index 0000000000..d833a0cdb4
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@3x.png
new file mode 100644
index 0000000000..a632b6ae1c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@4x.png
new file mode 100644
index 0000000000..b5affab772
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-hovered@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed.png
new file mode 100644
index 0000000000..4fbbc060e8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@2x.png
new file mode 100644
index 0000000000..7939f943e5
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@3x.png
new file mode 100644
index 0000000000..adcbe45bb7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@4x.png
new file mode 100644
index 0000000000..74c0c77e6f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator-pressed@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator.png b/src/quickcontrols/imagine/images/switchdelegate-indicator.png
new file mode 100644
index 0000000000..b6b4f1cd79
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator@2x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator@2x.png
new file mode 100644
index 0000000000..bfeedeb720
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator@3x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator@3x.png
new file mode 100644
index 0000000000..19e5ba2ca7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/switchdelegate-indicator@4x.png b/src/quickcontrols/imagine/images/switchdelegate-indicator@4x.png
new file mode 100644
index 0000000000..9345cd4fdb
--- /dev/null
+++ b/src/quickcontrols/imagine/images/switchdelegate-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbar-background.png b/src/quickcontrols/imagine/images/tabbar-background.png
new file mode 100644
index 0000000000..002efdedde
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbar-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbar-background@2x.png b/src/quickcontrols/imagine/images/tabbar-background@2x.png
new file mode 100644
index 0000000000..aaa1cbaf4b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbar-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbar-background@3x.png b/src/quickcontrols/imagine/images/tabbar-background@3x.png
new file mode 100644
index 0000000000..c4eb9e1f02
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbar-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbar-background@4x.png b/src/quickcontrols/imagine/images/tabbar-background@4x.png
new file mode 100644
index 0000000000..4a4e234a6a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbar-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-checked.9.png b/src/quickcontrols/imagine/images/tabbutton-background-checked.9.png
new file mode 100644
index 0000000000..d2f0fa76a6
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-checked@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-checked@2x.9.png
new file mode 100644
index 0000000000..bee1329202
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-checked@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-checked@3x.9.png
new file mode 100644
index 0000000000..70afb7d337
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-checked@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-checked@4x.9.png
new file mode 100644
index 0000000000..3a2015c464
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked.9.png
new file mode 100644
index 0000000000..a6d3011bd9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@2x.9.png
new file mode 100644
index 0000000000..8ebfa02686
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@3x.9.png
new file mode 100644
index 0000000000..1d5a1d5149
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@4x.9.png
new file mode 100644
index 0000000000..f06dc55f9b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled.9.png
new file mode 100644
index 0000000000..a6d3011bd9
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled@2x.9.png
new file mode 100644
index 0000000000..8ebfa02686
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled@3x.9.png
new file mode 100644
index 0000000000..1d5a1d5149
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-disabled@4x.9.png
new file mode 100644
index 0000000000..f06dc55f9b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-hovered.9.png b/src/quickcontrols/imagine/images/tabbutton-background-hovered.9.png
new file mode 100644
index 0000000000..3f945184f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-hovered@2x.9.png
new file mode 100644
index 0000000000..8a19720a2a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-hovered@3x.9.png
new file mode 100644
index 0000000000..eadcf45714
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-hovered@4x.9.png
new file mode 100644
index 0000000000..8bf8e992aa
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-pressed.9.png b/src/quickcontrols/imagine/images/tabbutton-background-pressed.9.png
new file mode 100644
index 0000000000..d48733ed81
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-pressed@2x.9.png
new file mode 100644
index 0000000000..fbbaad7bec
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-pressed@3x.9.png
new file mode 100644
index 0000000000..3a0ba70e63
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background-pressed@4x.9.png
new file mode 100644
index 0000000000..c04f124e5e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background.9.png b/src/quickcontrols/imagine/images/tabbutton-background.9.png
new file mode 100644
index 0000000000..2266c72223
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background@2x.9.png b/src/quickcontrols/imagine/images/tabbutton-background@2x.9.png
new file mode 100644
index 0000000000..b7adb7adc3
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background@3x.9.png b/src/quickcontrols/imagine/images/tabbutton-background@3x.9.png
new file mode 100644
index 0000000000..d8f4eae55f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tabbutton-background@4x.9.png b/src/quickcontrols/imagine/images/tabbutton-background@4x.9.png
new file mode 100644
index 0000000000..066d35b38c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tabbutton-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-disabled.9.png b/src/quickcontrols/imagine/images/textarea-background-disabled.9.png
new file mode 100644
index 0000000000..97d48f8c00
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/textarea-background-disabled@2x.9.png
new file mode 100644
index 0000000000..f9ea1d49dd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/textarea-background-disabled@3x.9.png
new file mode 100644
index 0000000000..04e7ef6f07
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/textarea-background-disabled@4x.9.png
new file mode 100644
index 0000000000..feaaa3bcbc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-focused.9.png b/src/quickcontrols/imagine/images/textarea-background-focused.9.png
new file mode 100644
index 0000000000..1d73acfa0a
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-focused@2x.9.png b/src/quickcontrols/imagine/images/textarea-background-focused@2x.9.png
new file mode 100644
index 0000000000..5be4cd6f8c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-focused@3x.9.png b/src/quickcontrols/imagine/images/textarea-background-focused@3x.9.png
new file mode 100644
index 0000000000..6ba3e24610
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background-focused@4x.9.png b/src/quickcontrols/imagine/images/textarea-background-focused@4x.9.png
new file mode 100644
index 0000000000..366aa5112f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background.9.png b/src/quickcontrols/imagine/images/textarea-background.9.png
new file mode 100644
index 0000000000..0b9ca9f3ec
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background@2x.9.png b/src/quickcontrols/imagine/images/textarea-background@2x.9.png
new file mode 100644
index 0000000000..a806ed1b11
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background@3x.9.png b/src/quickcontrols/imagine/images/textarea-background@3x.9.png
new file mode 100644
index 0000000000..547ef33c41
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textarea-background@4x.9.png b/src/quickcontrols/imagine/images/textarea-background@4x.9.png
new file mode 100644
index 0000000000..b759b1e80b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textarea-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-disabled.9.png b/src/quickcontrols/imagine/images/textfield-background-disabled.9.png
new file mode 100644
index 0000000000..312a1294d1
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-disabled.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-disabled@2x.9.png b/src/quickcontrols/imagine/images/textfield-background-disabled@2x.9.png
new file mode 100644
index 0000000000..2c6c7e9165
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-disabled@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-disabled@3x.9.png b/src/quickcontrols/imagine/images/textfield-background-disabled@3x.9.png
new file mode 100644
index 0000000000..1d1aca7177
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-disabled@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-disabled@4x.9.png b/src/quickcontrols/imagine/images/textfield-background-disabled@4x.9.png
new file mode 100644
index 0000000000..ed93182a70
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-disabled@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-focused.9.png b/src/quickcontrols/imagine/images/textfield-background-focused.9.png
new file mode 100644
index 0000000000..1251f4e4cc
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-focused@2x.9.png b/src/quickcontrols/imagine/images/textfield-background-focused@2x.9.png
new file mode 100644
index 0000000000..d535e8bc98
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-focused@3x.9.png b/src/quickcontrols/imagine/images/textfield-background-focused@3x.9.png
new file mode 100644
index 0000000000..9fca3bb239
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background-focused@4x.9.png b/src/quickcontrols/imagine/images/textfield-background-focused@4x.9.png
new file mode 100644
index 0000000000..a275a52e89
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background.9.png b/src/quickcontrols/imagine/images/textfield-background.9.png
new file mode 100644
index 0000000000..7ea6096880
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background@2x.9.png b/src/quickcontrols/imagine/images/textfield-background@2x.9.png
new file mode 100644
index 0000000000..0a4c3f2a9f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background@3x.9.png b/src/quickcontrols/imagine/images/textfield-background@3x.9.png
new file mode 100644
index 0000000000..e855274187
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/textfield-background@4x.9.png b/src/quickcontrols/imagine/images/textfield-background@4x.9.png
new file mode 100644
index 0000000000..29ef5bb9d2
--- /dev/null
+++ b/src/quickcontrols/imagine/images/textfield-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbar-background.png b/src/quickcontrols/imagine/images/toolbar-background.png
new file mode 100644
index 0000000000..9c67cf2702
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbar-background.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbar-background@2x.png b/src/quickcontrols/imagine/images/toolbar-background@2x.png
new file mode 100644
index 0000000000..b0602519a7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbar-background@2x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbar-background@3x.png b/src/quickcontrols/imagine/images/toolbar-background@3x.png
new file mode 100644
index 0000000000..7f227ca343
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbar-background@3x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbar-background@4x.png b/src/quickcontrols/imagine/images/toolbar-background@4x.png
new file mode 100644
index 0000000000..4788ecc743
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbar-background@4x.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-focused.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-checked@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-checked@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked.9.png b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-disabled-checked@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-focused.9.png b/src/quickcontrols/imagine/images/toolbutton-background-focused.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-focused.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-focused@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-focused@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-focused@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-focused@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-focused@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-focused@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-focused@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-focused@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-focused@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-hovered.9.png b/src/quickcontrols/imagine/images/toolbutton-background-hovered.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-hovered.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-hovered@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-hovered@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-hovered@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-hovered@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-hovered@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-hovered@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-hovered@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-hovered@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-hovered@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-pressed.9.png b/src/quickcontrols/imagine/images/toolbutton-background-pressed.9.png
new file mode 100644
index 0000000000..287a2872de
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-pressed.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-pressed@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-pressed@2x.9.png
new file mode 100644
index 0000000000..aa84416561
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-pressed@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-pressed@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-pressed@3x.9.png
new file mode 100644
index 0000000000..8c6822555b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-pressed@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background-pressed@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background-pressed@4x.9.png
new file mode 100644
index 0000000000..89bdd096f8
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background-pressed@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background.9.png b/src/quickcontrols/imagine/images/toolbutton-background.9.png
new file mode 100644
index 0000000000..5a72a62128
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background@2x.9.png b/src/quickcontrols/imagine/images/toolbutton-background@2x.9.png
new file mode 100644
index 0000000000..688a071a84
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background@3x.9.png b/src/quickcontrols/imagine/images/toolbutton-background@3x.9.png
new file mode 100644
index 0000000000..64375a7e5b
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolbutton-background@4x.9.png b/src/quickcontrols/imagine/images/toolbutton-background@4x.9.png
new file mode 100644
index 0000000000..96004a103c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolbutton-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-horizontal.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal.9.png
new file mode 100644
index 0000000000..75e3e66229
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@2x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@2x.9.png
new file mode 100644
index 0000000000..3662dec944
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@3x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@3x.9.png
new file mode 100644
index 0000000000..2771470175
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@4x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@4x.9.png
new file mode 100644
index 0000000000..deeda9f5fd
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-horizontal@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-vertical.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-vertical.9.png
new file mode 100644
index 0000000000..5b607aaf5c
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-vertical@2x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@2x.9.png
new file mode 100644
index 0000000000..f5a11e0467
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-vertical@3x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@3x.9.png
new file mode 100644
index 0000000000..c957280f37
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/toolseparator-separator-vertical@4x.9.png b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@4x.9.png
new file mode 100644
index 0000000000..c888689df7
--- /dev/null
+++ b/src/quickcontrols/imagine/images/toolseparator-separator-vertical@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tooltip-background.9.png b/src/quickcontrols/imagine/images/tooltip-background.9.png
new file mode 100644
index 0000000000..2e0dc67c3e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tooltip-background.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tooltip-background@2x.9.png b/src/quickcontrols/imagine/images/tooltip-background@2x.9.png
new file mode 100644
index 0000000000..dd5609982f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tooltip-background@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tooltip-background@3x.9.png b/src/quickcontrols/imagine/images/tooltip-background@3x.9.png
new file mode 100644
index 0000000000..fed465427e
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tooltip-background@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/images/tooltip-background@4x.9.png b/src/quickcontrols/imagine/images/tooltip-background@4x.9.png
new file mode 100644
index 0000000000..9bc964908f
--- /dev/null
+++ b/src/quickcontrols/imagine/images/tooltip-background@4x.9.png
Binary files differ
diff --git a/src/quickcontrols/imagine/impl/CMakeLists.txt b/src/quickcontrols/imagine/impl/CMakeLists.txt
new file mode 100644
index 0000000000..830176f13e
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/CMakeLists.txt
@@ -0,0 +1,46 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2imaginestyleimplplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "OpacityMask.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2imaginestyleimplplugin
+ URI "QtQuick.Controls.Imagine.impl"
+ VERSION "${PROJECT_VERSION}"
+ CLASS_NAME QtQuickControls2ImagineStyleImplPlugin
+ PLUGIN_TARGET qtquickcontrols2imaginestyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ QML_FILES
+ ${qml_files}
+ IMPORTS
+ QtQuick.Controls.impl/auto
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+# Resources:
+set(qmake_qtquickcontrols2imaginestyleimplplugin_resource_files
+ "shaders/+glslcore/OpacityMask.frag"
+ "shaders/+qsb/OpacityMask.frag"
+ "shaders/OpacityMask.frag"
+)
+
+qt_internal_add_resource(qtquickcontrols2imaginestyleimplplugin "qmake_qtquickcontrols2imaginestyleimplplugin"
+ PREFIX
+ "qt-project.org/imports/QtQuick/Controls/Imagine/impl"
+ FILES
+ ${qmake_qtquickcontrols2imaginestyleimplplugin_resource_files}
+)
diff --git a/src/quickcontrols/imagine/impl/OpacityMask.qml b/src/quickcontrols/imagine/impl/OpacityMask.qml
new file mode 100644
index 0000000000..6108901129
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/OpacityMask.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+
+/*
+ A cross-graphics API implementation of QtGraphicalEffects' OpacityMask.
+ */
+Item {
+ id: rootItem
+
+ property variant source
+ property variant maskSource
+ property bool cached: false
+
+ ShaderEffectSource {
+ id: cacheItem
+ anchors.fill: parent
+ visible: rootItem.cached
+ smooth: true
+ sourceItem: shaderItem
+ live: true
+ hideSource: visible
+ }
+
+ ShaderEffect {
+ id: shaderItem
+ property variant source: rootItem.source
+ property variant maskSource: rootItem.maskSource
+
+ anchors.fill: parent
+
+ fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/impl/shaders/OpacityMask.frag"
+ }
+}
diff --git a/src/quickcontrols/imagine/impl/shaders/+glslcore/OpacityMask.frag b/src/quickcontrols/imagine/impl/shaders/+glslcore/OpacityMask.frag
new file mode 100644
index 0000000000..529e269614
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/shaders/+glslcore/OpacityMask.frag
@@ -0,0 +1,13 @@
+#version 150
+
+uniform float qt_Opacity;
+uniform sampler2D source;
+uniform sampler2D maskSource;
+
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+void main()
+{
+ fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/quickcontrols/imagine/impl/shaders/+qsb/OpacityMask.frag b/src/quickcontrols/imagine/impl/shaders/+qsb/OpacityMask.frag
new file mode 100644
index 0000000000..331b30b807
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/shaders/+qsb/OpacityMask.frag
Binary files differ
diff --git a/src/quickcontrols/imagine/impl/shaders/OpacityMask.frag b/src/quickcontrols/imagine/impl/shaders/OpacityMask.frag
new file mode 100644
index 0000000000..84f9bc3ee6
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/shaders/OpacityMask.frag
@@ -0,0 +1,7 @@
+varying highp vec2 qt_TexCoord0;
+uniform highp float qt_Opacity;
+uniform lowp sampler2D source;
+uniform lowp sampler2D maskSource;
+void main(void) {
+ gl_FragColor = texture2D(source, qt_TexCoord0.st) * (texture2D(maskSource, qt_TexCoord0.st).a) * qt_Opacity;
+}
diff --git a/src/quickcontrols/imagine/impl/shaders/OpacityMask_rhi.frag b/src/quickcontrols/imagine/impl/shaders/OpacityMask_rhi.frag
new file mode 100644
index 0000000000..9ae3249978
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/shaders/OpacityMask_rhi.frag
@@ -0,0 +1,17 @@
+#version 440
+
+layout(location = 0) in vec2 qt_TexCoord0;
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+} ubuf;
+
+layout(binding = 1) uniform sampler2D source;
+layout(binding = 2) uniform sampler2D maskSource;
+
+void main()
+{
+ fragColor = texture(source, qt_TexCoord0.st) * (texture(maskSource, qt_TexCoord0.st).a) * ubuf.qt_Opacity;
+}
diff --git a/src/quickcontrols/imagine/impl/shaders/compile.bat b/src/quickcontrols/imagine/impl/shaders/compile.bat
new file mode 100644
index 0000000000..42b8cb45c0
--- /dev/null
+++ b/src/quickcontrols/imagine/impl/shaders/compile.bat
@@ -0,0 +1,4 @@
+:: Copyright (C) 2020 The Qt Company Ltd.
+:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/OpacityMask.frag OpacityMask_rhi.frag
diff --git a/src/quickcontrols/imagine/qquickimaginestyle.cpp b/src/quickcontrols/imagine/qquickimaginestyle.cpp
new file mode 100644
index 0000000000..377103e2f2
--- /dev/null
+++ b/src/quickcontrols/imagine/qquickimaginestyle.cpp
@@ -0,0 +1,137 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickimaginestyle_p.h"
+
+#include <QtCore/qsettings.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_GLOBAL_STATIC_WITH_ARGS(QString, GlobalPath, (QLatin1String("qrc:/qt-project.org/imports/QtQuick/Controls/Imagine/images/")))
+
+static QString ensureSlash(const QString &path)
+{
+ const QChar slash = QLatin1Char('/');
+ return path.endsWith(slash) ? path : path + slash;
+}
+
+QQuickImagineStyle::QQuickImagineStyle(QObject *parent)
+ : QQuickAttachedPropertyPropagator(parent),
+ m_path(*GlobalPath())
+{
+ init();
+}
+
+QQuickImagineStyle *QQuickImagineStyle::qmlAttachedProperties(QObject *object)
+{
+ return new QQuickImagineStyle(object);
+}
+
+QString QQuickImagineStyle::path() const
+{
+ return m_path;
+}
+
+void QQuickImagineStyle::setPath(const QString &path)
+{
+ m_explicitPath = true;
+ if (m_path == path)
+ return;
+
+ m_path = path;
+ propagatePath();
+
+ emit pathChanged();
+}
+
+void QQuickImagineStyle::inheritPath(const QString &path)
+{
+ if (m_explicitPath || m_path == path)
+ return;
+
+ m_path = path;
+ propagatePath();
+ emit pathChanged();
+}
+
+void QQuickImagineStyle::propagatePath()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickImagineStyle *imagine = qobject_cast<QQuickImagineStyle *>(child);
+ if (imagine)
+ imagine->inheritPath(m_path);
+ }
+}
+
+void QQuickImagineStyle::resetPath()
+{
+ if (!m_explicitPath)
+ return;
+
+ m_explicitPath = false;
+ QQuickImagineStyle *imagine = qobject_cast<QQuickImagineStyle *>(attachedParent());
+ inheritPath(imagine ? imagine->path() : *GlobalPath());
+}
+
+QUrl QQuickImagineStyle::url() const
+{
+ // Using ApplicationWindow as an example, its NinePatchImage url
+ // was previously assigned like this:
+ //
+ // soruce: Imagine.path + "applicationwindow-background"
+ //
+ // If Imagine.path is set to ":/images" by the user, then the final URL would be:
+ //
+ // QUrl("file:///home/user/qt/qtbase/qml/QtQuick/Controls/Imagine/:/images/applicationwindow-background")
+ //
+ // To ensure that the correct URL is constructed, we do it ourselves here,
+ // and then the control QML files use the "url" property instead.
+ const QString path = ensureSlash(m_path);
+ if (path.startsWith(QLatin1String("qrc")))
+ return QUrl(path);
+
+ if (path.startsWith(QLatin1String(":/")))
+ return QUrl(QLatin1String("qrc") + path);
+
+ return QUrl::fromLocalFile(path);
+}
+
+void QQuickImagineStyle::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
+{
+ Q_UNUSED(oldParent);
+ QQuickImagineStyle *imagine = qobject_cast<QQuickImagineStyle *>(newParent);
+ if (imagine)
+ inheritPath(imagine->path());
+}
+
+static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer<QSettings> &settings, const QString &name)
+{
+ QByteArray value = qgetenv(env);
+#if QT_CONFIG(settings)
+ if (value.isNull() && !settings.isNull())
+ value = settings->value(name).toByteArray();
+#endif
+ return value;
+}
+
+void QQuickImagineStyle::init()
+{
+ static bool globalsInitialized = false;
+ if (!globalsInitialized) {
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(QStringLiteral("Imagine"));
+
+ QString path = QString::fromUtf8(resolveSetting("QT_QUICK_CONTROLS_IMAGINE_PATH", settings, QStringLiteral("Path")));
+ if (!path.isEmpty())
+ *GlobalPath() = m_path = ensureSlash(path);
+
+ globalsInitialized = true;
+ }
+
+ QQuickAttachedPropertyPropagator::initialize(); // TODO: lazy init?
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickimaginestyle_p.cpp"
diff --git a/src/quickcontrols/imagine/qquickimaginestyle_p.h b/src/quickcontrols/imagine/qquickimaginestyle_p.h
new file mode 100644
index 0000000000..81f17fb58c
--- /dev/null
+++ b/src/quickcontrols/imagine/qquickimaginestyle_p.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKIMAGINESTYLE_P_H
+#define QQUICKIMAGINESTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qvariant.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/qquickattachedpropertypropagator.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickImagineStyle : public QQuickAttachedPropertyPropagator
+{
+ Q_OBJECT
+ Q_PROPERTY(QString path READ path WRITE setPath RESET resetPath NOTIFY pathChanged FINAL)
+ Q_PROPERTY(QUrl url READ url NOTIFY pathChanged FINAL)
+ QML_NAMED_ELEMENT(Imagine)
+ QML_ATTACHED(QQuickImagineStyle)
+ QML_UNCREATABLE("")
+ QML_ADDED_IN_VERSION(2, 3)
+
+public:
+ explicit QQuickImagineStyle(QObject *parent = nullptr);
+
+ static QQuickImagineStyle *qmlAttachedProperties(QObject *object);
+
+ QString path() const;
+ void setPath(const QString &path);
+ void inheritPath(const QString &path);
+ void propagatePath();
+ void resetPath();
+
+ QUrl url() const;
+
+Q_SIGNALS:
+ void pathChanged();
+
+protected:
+ void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) override;
+
+private:
+ void init();
+
+ bool m_explicitPath = false;
+ QString m_path;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKIMAGINESTYLE_P_H
diff --git a/src/quickcontrols/imagine/qquickimaginetheme.cpp b/src/quickcontrols/imagine/qquickimaginetheme.cpp
new file mode 100644
index 0000000000..921034962a
--- /dev/null
+++ b/src/quickcontrols/imagine/qquickimaginetheme.cpp
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickimaginetheme_p.h"
+
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QQuickImagineTheme::initialize(QQuickTheme *theme)
+{
+ QFont systemFont;
+ systemFont.setFamilies(QStringList{QLatin1String("Open Sans")});
+ theme->setFont(QQuickTheme::System, systemFont);
+
+ const QColor accentColor = QColor::fromRgb(0x4fc1e9);
+ const QColor windowTextColor = QColor::fromRgb(0x434a54);
+ const QColor disabledWindowTextColor = QColor::fromRgb(0xccd1d9);
+
+ QPalette systemPalette;
+ systemPalette.setColor(QPalette::ButtonText, Qt::white);
+ systemPalette.setColor(QPalette::BrightText, Qt::white);
+ systemPalette.setColor(QPalette::Highlight, accentColor);
+ systemPalette.setColor(QPalette::HighlightedText, Qt::white);
+ systemPalette.setColor(QPalette::Text, windowTextColor);
+ systemPalette.setColor(QPalette::ToolTipText, Qt::white);
+ systemPalette.setColor(QPalette::WindowText, windowTextColor);
+ systemPalette.setColor(QPalette::Disabled, QPalette::Text, disabledWindowTextColor);
+ systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, disabledWindowTextColor);
+ theme->setPalette(QQuickTheme::System, systemPalette);
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/imagine/qquickimaginetheme_p.h b/src/quickcontrols/imagine/qquickimaginetheme_p.h
new file mode 100644
index 0000000000..93b3063b78
--- /dev/null
+++ b/src/quickcontrols/imagine/qquickimaginetheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKIMAGINETHEME_P_H
+#define QQUICKIMAGINETHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickImagineTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKIMAGINETHEME_P_H
diff --git a/src/quickcontrols/imagine/qtquickcontrols2imaginestyleplugin.cpp b/src/quickcontrols/imagine/qtquickcontrols2imaginestyleplugin.cpp
new file mode 100644
index 0000000000..ddf3927562
--- /dev/null
+++ b/src/quickcontrols/imagine/qtquickcontrols2imaginestyleplugin.cpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickimaginestyle_p.h"
+#include "qquickimaginetheme_p.h"
+
+#include <QtCore/qloggingcategory.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Imagine();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Imagine);
+
+class QtQuickControls2ImagineStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2ImagineStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+
+ QQuickImagineTheme theme;
+};
+
+QtQuickControls2ImagineStylePlugin::QtQuickControls2ImagineStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Imagine;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2ImagineStylePlugin::name() const
+{
+ return QStringLiteral("Imagine");
+}
+
+void QtQuickControls2ImagineStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ this->theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2imaginestyleplugin.moc"
diff --git a/src/quickcontrols/ios/Button.qml b/src/quickcontrols/ios/Button.qml
new file mode 100644
index 0000000000..6d8a6f8e09
--- /dev/null
+++ b/src/quickcontrols/ios/Button.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ bottomPadding: 4
+ topPadding: 4
+ rightPadding: 4
+ leftPadding: 4
+
+ icon.width: 17
+ icon.height: 17
+ icon.color: control.flat ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid)
+ : control.palette.buttonText
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.flat ? (control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid)
+ : control.palette.buttonText
+ }
+
+ background: Rectangle {
+ implicitHeight: 17
+ implicitWidth: 10
+ radius: 4
+
+ visible: !control.flat
+ color: !control.down ? control.palette.button : control.palette.highlight
+ }
+}
diff --git a/src/quickcontrols/ios/CMakeLists.txt b/src/quickcontrols/ios/CMakeLists.txt
new file mode 100644
index 0000000000..83faad5315
--- /dev/null
+++ b/src/quickcontrols/ios/CMakeLists.txt
@@ -0,0 +1,107 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2iosstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "Slider.qml"
+ "RangeSlider.qml"
+ "Switch.qml"
+ "Button.qml"
+ "CheckBox.qml"
+ "RadioButton.qml"
+ "SpinBox.qml"
+ "ProgressBar.qml"
+ "Dial.qml"
+ "PageIndicator.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ScrollIndicator.qml"
+ "ItemDelegate.qml"
+ "SwitchDelegate.qml"
+ "RadioDelegate.qml"
+ "CheckDelegate.qml"
+ "SwipeDelegate.qml"
+ "StackView.qml"
+ "TreeViewDelegate.qml"
+ "ScrollBar.qml"
+ "TabButton.qml"
+ "ToolButton.qml"
+ "MenuBarItem.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "SplitView.qml"
+ "TabBar.qml"
+ "ToolBar.qml"
+ "MenuBar.qml"
+ "Drawer.qml"
+ "Popup.qml"
+ "Menu.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+)
+
+set_source_files_properties(Slider.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2iosstyleplugin
+ URI "QtQuick.Controls.iOS"
+ VERSION "${PROJECT_VERSION}"
+ CLASS_NAME QtQuickControls2IOSStylePlugin
+ IMPORTS
+ QtQuick.Controls.Basic/auto
+ PAST_MAJOR_VERSIONS 2
+ PLUGIN_TARGET qtquickcontrols2iosstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qtquickcontrols2iosstyleplugin.cpp
+ qquickiostheme_p.h qquickiostheme.mm
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+ Qt::QuickControls2ImplPrivate
+)
+
+qt_internal_extend_target(qtquickcontrols2iosstyleplugin CONDITION APPLE AND IOS
+ LIBRARIES
+ ${FWUIKit}
+)
+
+file(GLOB resource_glob RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "images/*.png")
+foreach(file IN LISTS resource_glob_0)
+ set_source_files_properties("${CMAKE_CURRENT_SOURCE_DIR}/${file}" PROPERTIES QT_RESOURCE_ALIAS "${file}")
+endforeach()
+
+# Resources:
+set(qmake_qtquickcontrols2iosstyleplugin_resource_files
+ ${resource_glob}
+)
+
+qt_internal_add_resource(qtquickcontrols2iosstyleplugin "qmake_qtquickcontrols2iosstyleplugin"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/iOS"
+ FILES
+ ${qmake_qtquickcontrols2iosstyleplugin_resource_files}
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2iosstyleplugin
+ qtquickcontrols2iosstyleimplplugin)
+
+# Basic style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2iosstyleplugin
+ qtquickcontrols2basicstyleplugin)
diff --git a/src/quickcontrols/ios/CheckBox.qml b/src/quickcontrols/ios/CheckBox.qml
new file mode 100644
index 0000000000..2ef8f83114
--- /dev/null
+++ b/src/quickcontrols/ios/CheckBox.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + (control.checkState === Qt.Unchecked ? "radiobutton-indicator" : "checkbox-indicator")
+ ImageSelector on source {
+ states: [
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/ios/CheckDelegate.qml b/src/quickcontrols/ios/CheckDelegate.qml
new file mode 100644
index 0000000000..fbd2a4ce35
--- /dev/null
+++ b/src/quickcontrols/ios/CheckDelegate.qml
@@ -0,0 +1,75 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.CheckDelegate {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+ padding: 7
+ leftPadding: 16
+ rightPadding: 16
+ spacing: 14
+
+ icon.width: 29
+ icon.height: 29
+ icon.color: control.enabled ? control.palette.text : control.palette.mid
+
+ indicator: Image {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + (control.checkState === Qt.Unchecked ? "radiobutton-indicator" : "checkbox-indicator")
+ ImageSelector on source {
+ states: [
+ {"checked": control.checkState === Qt.Checked},
+ {"partially-checked": control.checkState === Qt.PartiallyChecked},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.palette.text : control.palette.mid
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ NinePatchImage {
+ property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0
+ x: control.down ? 0 : control.leftPadding + offset
+ y: control.down ? -1 : 0
+ height: control.height + (control.down ? 1 : 0)
+ width: control.down ? control.width : control.availableWidth + control.rightPadding - offset
+ source: IOS.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"pressed": control.down}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/Dial.qml b/src/quickcontrols/ios/Dial.qml
new file mode 100644
index 0000000000..2a4c9666bc
--- /dev/null
+++ b/src/quickcontrols/ios/Dial.qml
@@ -0,0 +1,102 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+import QtQuick.Shapes
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ leftInset: handle ? handle.width / 2 : 0
+ rightInset: handle ? handle.width / 2 : 0
+ topInset: handle ? handle.height / 2 : 0
+ bottomInset: handle ? handle.height / 2 : 0
+
+ background: Item {
+ implicitWidth: 104
+ implicitHeight: 104
+ x: control.leftInset + (control.availableWidth - width) / 2
+ y: control.topInset + (control.availableHeight - height) / 2
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ implicitWidth: parent.implicitWidth
+ implicitHeight: parent.implicitHeight
+ width: Math.max(50, Math.min(control.background.width, control.background.height))
+ height: width
+ color: "transparent"
+ border.color: control.palette.mid
+ border.width: 4
+ radius: width * 0.5
+ z: -1
+
+ opacity: control.enabled? 1 : 0.5
+ }
+
+ Shape {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ implicitWidth: parent.implicitWidth
+ implicitHeight: parent.implicitHeight
+ width: Math.max(50, Math.min(control.background.width, control.background.height))
+ height: width
+ layer.enabled: true
+ layer.samples: 4
+
+ ShapePath {
+ fillColor: "transparent"
+ strokeColor: control.palette.button
+ strokeWidth: 4
+
+ capStyle: ShapePath.RoundCap
+
+ PathAngleArc {
+ centerX: control.background.children[0].width / 2
+ centerY: control.background.children[0].height / 2
+ radiusX: control.background.children[0].width / 2 - 2
+ radiusY: radiusX
+ startAngle: -230
+ sweepAngle: 140 + control.angle
+ }
+ }
+ }
+ }
+
+ handle: Item {
+ height: dialHandle.height - dialHandle.topInset - dialHandle.bottomInset
+ width: dialHandle.width - dialHandle.rightInset - dialHandle.leftInset
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+
+ transform: [
+ Translate {
+ x: Math.cos((angle - 90) * Math.PI / 180) * Math.min(control.background.width, control.background.height) * 0.5;
+ y: Math.sin((angle - 90) * Math.PI / 180) * Math.min(control.background.width, control.background.height) * 0.5;
+ }
+ ]
+
+ readonly property NinePatchImage dialHandle: NinePatchImage {
+ parent: control.handle
+ x: -leftInset
+ y: -topInset
+
+ source: IOS.url + "slider-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"disabled": !control.enabled}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/Drawer.qml b/src/quickcontrols/ios/Drawer.qml
new file mode 100644
index 0000000000..52cdb8b372
--- /dev/null
+++ b/src/quickcontrols/ios/Drawer.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ property real inset: control.dim ? 8 : 0
+ property bool vertical: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
+
+ rightInset: background && control.edge === Qt.LeftEdge ? -inset : 0
+ leftInset: background && control.edge === Qt.RightEdge ? -inset : 0
+ bottomInset: background && control.edge === Qt.TopEdge ? -inset : 0
+ topInset: background && control.edge === Qt.BottomEdge ? -inset : 0
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ background: Item {
+ NinePatchImage {
+ source: IOS.url + "drawer-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"modal": control.modal}
+ ]
+ }
+ y: (parent.height - height) / 2
+ x: (parent.width - width) / 2
+ rotation: control.edge === Qt.TopEdge ? 90 : (control.edge === Qt.BottomEdge ? -90
+ : (control.edge === Qt.RightEdge ? 180 : 0))
+ width: vertical ? parent.width : parent.height
+ height: vertical ? parent.height : parent.width
+ }
+ Rectangle {
+ width: vertical ? 1 : parent.width
+ height: vertical ? parent.height : 1
+ color: control.palette.mid
+ x: control.edge === Qt.LeftEdge ? parent.width - 1 - inset : (control.edge === Qt.RightEdge ? inset : 0)
+ y: control.edge === Qt.BottomEdge ? inset : (control.edge === Qt.TopEdge ? parent.height - 1 - inset : 0)
+ z: 10
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent(control.palette.mid, 0.5)
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/ios/Frame.qml b/src/quickcontrols/ios/Frame.qml
new file mode 100644
index 0000000000..5c52269a3c
--- /dev/null
+++ b/src/quickcontrols/ios/Frame.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 16
+ leftPadding: 20
+ rightPadding: 20
+ spacing: 10
+
+ background: Rectangle {
+ radius: 9
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/ios/GroupBox.qml b/src/quickcontrols/ios/GroupBox.qml
new file mode 100644
index 0000000000..3adc599ddf
--- /dev/null
+++ b/src/quickcontrols/ios/GroupBox.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 16
+ leftPadding: 20
+ rightPadding: 20
+ topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+ spacing: 10
+
+ label: Text {
+ x: control.leftPadding
+ width: control.availableWidth
+
+ text: control.title
+ font.pointSize: control.font.pointSize - 2.0
+ font.capitalization: Font.AllUppercase
+ color: control.palette.placeholderText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+ radius: 9
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ }
+}
diff --git a/src/quickcontrols/ios/ItemDelegate.qml b/src/quickcontrols/ios/ItemDelegate.qml
new file mode 100644
index 0000000000..28146e51fd
--- /dev/null
+++ b/src/quickcontrols/ios/ItemDelegate.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+ padding: 7
+ leftPadding: 16
+ rightPadding: 16
+ spacing: 14
+
+ icon.width: 29
+ icon.height: 29
+ icon.color: control.enabled ? control.palette.text : control.palette.mid
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.palette.text : control.palette.mid
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ NinePatchImage {
+ property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0
+ x: control.down ? 0 : control.leftPadding + offset
+ y: control.down ? -1 : 0
+ height: control.height + (control.down ? 1 : 0)
+ width: control.down ? control.width : control.availableWidth + control.rightPadding - offset
+ source: IOS.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"pressed": control.down}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/Menu.qml b/src/quickcontrols/ios/Menu.qml
new file mode 100644
index 0000000000..437731c19e
--- /dev/null
+++ b/src/quickcontrols/ios/Menu.qml
@@ -0,0 +1,71 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.Menu {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuItem {}
+
+ margins: 0
+ cascade: true
+ dim: modal || control.parent && control.parent.menu
+ overlap: control.width
+
+ enter: Transition {
+ NumberAnimation { property: "scale"; from: 0.2; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ NumberAnimation { property: "scale"; from: 1.0; to: 0.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Item {
+ implicitHeight: 44
+ implicitWidth: 250
+ NinePatchImage {
+ width: parent.width
+ height: parent.height
+ source: IOS.url + "menu-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent("black", 0.5)
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent("black", 0.5)
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/ios/MenuBar.qml b/src/quickcontrols/ios/MenuBar.qml
new file mode 100644
index 0000000000..06f549e82a
--- /dev/null
+++ b/src/quickcontrols/ios/MenuBar.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.MenuBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuBarItem { }
+
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.contentModel
+ }
+ }
+
+ background: Rectangle {
+ opacity: 0.98
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ Rectangle {
+ height: 1
+ width: parent.width
+ color: control.palette.mid
+ y: control.position === T.TabBar.Footer ? 0 : parent.height - 1
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/MenuBarItem.qml b/src/quickcontrols/ios/MenuBarItem.qml
new file mode 100644
index 0000000000..5fe36693e4
--- /dev/null
+++ b/src/quickcontrols/ios/MenuBarItem.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.MenuBarItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 6
+
+ icon.width: 25
+ icon.height: 25
+ icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid
+ }
+
+ background: Item {
+ implicitHeight: 49
+ }
+}
diff --git a/src/quickcontrols/ios/MenuItem.qml b/src/quickcontrols/ios/MenuItem.qml
new file mode 100644
index 0000000000..85137f5a21
--- /dev/null
+++ b/src/quickcontrols/ios/MenuItem.qml
@@ -0,0 +1,104 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: 12
+ rightPadding: 18
+ spacing: 9
+
+ icon.width: 19
+ icon.height: 19
+ icon.color: control.palette.windowText
+
+ property bool isSingleItem: control.menu && control.menu.count === 1
+ property bool isFirstItem: !isSingleItem && control.menu && control.menu.itemAt(0) === control ? true : false
+ property bool isLastItem: !isSingleItem && control.menu && control.menu.itemAt(control.menu.count - 1) === control ? true : false
+ property real indicatorWidth: 12
+
+ contentItem: IconLabel {
+ readonly property real padding: control.indicatorWidth + control.spacing
+ leftPadding: !control.mirrored ? padding : 0
+ rightPadding: control.mirrored ? padding : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ }
+
+ arrow: ColorImage {
+ x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: 7
+ height: 12
+ rotation: control.subMenu && (control.down || control.subMenu.visible) ? 90 : 0
+
+ visible: control.subMenu
+ opacity: control.enabled ? 1 : 0.5
+ mirror: control.mirrored
+ color: control.palette.windowText
+ source: control.subMenu ? "qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/arrow-indicator-light.png" : ""
+
+ Behavior on rotation { RotationAnimation { duration: 100 } }
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.width - width - control.rightPadding : control.leftPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: control.indicatorWidth
+ height: control.indicatorWidth
+
+ visible: control.checked
+ source: control.checkable ? "qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/radiodelegate-indicator-light.png" : ""
+ color: control.palette.windowText
+ }
+
+ background: Item {
+ implicitHeight: 44
+ implicitWidth: 250
+ NinePatchImage {
+ y: control.isLastItem ? -1 : 0
+ width: parent.width
+ height: control.isLastItem ? parent.height + 1 : parent.height
+ rotation: control.isLastItem ? 180 : 0
+ visible: !(isSingleItem && !control.down)
+ source: IOS.url + "menuitem-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"edge": control.isFirstItem || control.isLastItem},
+ {"single": control.isSingleItem},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"pressed": control.down}
+ ]
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "submenu-opened"
+ when: control.subMenu && control.subMenu.visible
+ PropertyChanges { target: control.menu; scale: 0.9 }
+ }
+ ]
+}
+
diff --git a/src/quickcontrols/ios/MenuSeparator.qml b/src/quickcontrols/ios/MenuSeparator.qml
new file mode 100644
index 0000000000..ba69005611
--- /dev/null
+++ b/src/quickcontrols/ios/MenuSeparator.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: NinePatchImage {
+ source: IOS.url + "menuseparator-separator"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/PageIndicator.qml b/src/quickcontrols/ios/PageIndicator.qml
new file mode 100644
index 0000000000..036f952ea8
--- /dev/null
+++ b/src/quickcontrols/ios/PageIndicator.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ delegate: Image {
+ source: IOS.url + "pageindicator-delegate"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"current": index === control.currentIndex},
+ ]
+ }
+ opacity: control.enabled ? 1 : 0.5
+ }
+
+ contentItem: Row {
+ spacing: 10
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/Popup.qml b/src/quickcontrols/ios/Popup.qml
new file mode 100644
index 0000000000..47a6157f71
--- /dev/null
+++ b/src/quickcontrols/ios/Popup.qml
@@ -0,0 +1,54 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: 23
+ padding: 16
+
+ enter: Transition {
+ NumberAnimation { property: "scale"; from: 1.5; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ background: Item {
+ implicitWidth: 270
+ implicitHeight: 140
+ NinePatchImage {
+ width: parent.width
+ height: parent.height
+ source: IOS.url + "popup-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Color.transparent("black", 0.5)
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Color.transparent("black", 0.5)
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/ios/ProgressBar.qml b/src/quickcontrols/ios/ProgressBar.qml
new file mode 100644
index 0000000000..c280d5f94f
--- /dev/null
+++ b/src/quickcontrols/ios/ProgressBar.qml
@@ -0,0 +1,66 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ opacity: control.enabled ? 1 : 0.5
+
+ contentItem: Item {
+ parent: control.background
+ implicitWidth: progress.width
+ implicitHeight: progress.implicitHeight
+ scale: control.mirrored ? -1 : 1
+
+ readonly property NinePatchImage progress: NinePatchImage {
+ parent: control.contentItem
+ visible: control.indeterminate || control.value
+ y: (parent.height - height) / 2
+ width: control.indeterminate ? control.width * 0.4 : control.position * parent.width
+
+ source: IOS.url + "slider-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+
+ NumberAnimation on x {
+ running: control.indeterminate && control.visible
+ from: -control.contentItem.progress.width
+ to: control.width
+ duration: 900
+ easing.type: Easing.Linear
+ loops: Animation.Infinite
+ }
+ }
+ }
+
+ background: Item {
+ implicitWidth: 150
+ implicitHeight: children[0].implicitHeight
+ clip: control.indeterminate
+ NinePatchImage {
+ source: IOS.url + "slider-background"
+ y: (parent.height - height) / 2
+ width: control.background.width
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/RadioButton.qml b/src/quickcontrols/ios/RadioButton.qml
new file mode 100644
index 0000000000..37cf71e1f5
--- /dev/null
+++ b/src/quickcontrols/ios/RadioButton.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 6
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + "radiobutton-indicator"
+ ImageSelector on source {
+ states: [
+ {"checked": control.checked},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/ios/RadioDelegate.qml b/src/quickcontrols/ios/RadioDelegate.qml
new file mode 100644
index 0000000000..6de6dbb622
--- /dev/null
+++ b/src/quickcontrols/ios/RadioDelegate.qml
@@ -0,0 +1,75 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+ padding: 7
+ leftPadding: 16
+ rightPadding: 16
+ spacing: 14
+
+ icon.width: 29
+ icon.height: 29
+ icon.color: control.enabled ? control.palette.text : control.palette.mid
+
+ indicator: Image {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ opacity: control.enabled ? 1 : 0.5
+ visible: control.checked
+
+ source: IOS.url + "radiodelegate-indicator"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.palette.text : control.palette.mid
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ NinePatchImage {
+ property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0
+ x: control.down ? 0 : control.leftPadding + offset
+ y: control.down ? -1 : 0
+ height: control.height + (control.down ? 1 : 0)
+ width: control.down ? control.width : control.availableWidth + control.rightPadding - offset
+ source: IOS.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"pressed": control.down}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/RangeSlider.qml b/src/quickcontrols/ios/RangeSlider.qml
new file mode 100644
index 0000000000..966f612ba8
--- /dev/null
+++ b/src/quickcontrols/ios/RangeSlider.qml
@@ -0,0 +1,91 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ first.implicitHandleWidth + leftPadding + rightPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ first.implicitHandleHeight + topPadding + bottomPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+
+ first.handle: Item {
+ implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset
+ implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset
+ x: Math.round(control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2))
+ y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height)))
+
+ NinePatchImage {
+ x: -leftInset
+ y: -topInset
+ source: IOS.url + "slider-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+ }
+ }
+
+ second.handle: Item {
+ implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset
+ implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset
+ x: Math.round(control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2))
+ y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height)))
+
+ NinePatchImage {
+ x: -leftInset
+ y: -topInset
+ source: IOS.url + "slider-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+ }
+ }
+
+ background: Item {
+ implicitWidth: control.horizontal ? 114 : children[0].implicitHeight
+ implicitHeight: control.horizontal ? children[0].implicitHeight : 114
+ opacity: control.enabled ? 1 : 0.5
+
+ NinePatchImage {
+ source: IOS.url + "slider-background"
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.horizontal ? 0 : -90
+ width: control.horizontal ? control.background.width : control.background.height
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+
+ NinePatchImage {
+ x: control.first.handle.width / 2 + control.first.position * (parent.width - control.first.handle.width)
+ y: (parent.height - height) / 2
+ width: control.second.position * (parent.width - control.first.handle.width) - control.first.position * (parent.width - control.first.handle.width)
+ height: parent.height
+
+ source: IOS.url + "slider-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/ScrollBar.qml b/src/quickcontrols/ios/ScrollBar.qml
new file mode 100644
index 0000000000..3bdabe4f08
--- /dev/null
+++ b/src/quickcontrols/ios/ScrollBar.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ contentItem: NinePatchImage {
+ width: control.availableWidth
+ height: control.availableHeight
+
+ source: IOS.url + "scrollindicator-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"horizontal": control.horizontal},
+ {"vertical": control.vertical}
+ ]
+ }
+ opacity: 0.0
+ }
+
+ states: State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/ScrollIndicator.qml b/src/quickcontrols/ios/ScrollIndicator.qml
new file mode 100644
index 0000000000..d6d842196a
--- /dev/null
+++ b/src/quickcontrols/ios/ScrollIndicator.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: NinePatchImage {
+ source: IOS.url + "scrollindicator-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"horizontal": control.horizontal},
+ {"vertical": control.vertical}
+ ]
+ }
+ width: control.availableWidth
+ height: control.availableHeight
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.active
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: [
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/ios/Slider.qml b/src/quickcontrols/ios/Slider.qml
new file mode 100644
index 0000000000..1f6ca9f242
--- /dev/null
+++ b/src/quickcontrols/ios/Slider.qml
@@ -0,0 +1,69 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ handle: Item {
+ implicitWidth: children[0].implicitWidth - children[0].leftInset - children[0].rightInset
+ implicitHeight: children[0].implicitWidth - children[0].topInset - children[0].bottomInset
+ x: Math.round(control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2))
+ y: Math.round(control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height)))
+
+ NinePatchImage {
+ x: -leftInset
+ y: -topInset
+ source: IOS.url + "slider-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"disabled": !control.enabled}
+ ]
+ }
+ }
+ }
+
+ background: Item {
+ implicitWidth: control.horizontal ? 114 : children[0].implicitHeight
+ implicitHeight: control.horizontal ? children[0].implicitHeight : 114
+ opacity: control.enabled ? 1 : 0.5
+
+ NinePatchImage {
+ source: IOS.url + "slider-background"
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.horizontal ? 0 : -90
+ width: control.horizontal ? background.width : background.height
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+
+ NinePatchImage {
+ width: control.handle.width / 2 + control.position * (parent.width - control.handle.width)
+ height: parent.height
+
+ source: IOS.url + "slider-progress"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/SpinBox.qml b/src/quickcontrols/ios/SpinBox.qml
new file mode 100644
index 0000000000..ed4e4c1bc7
--- /dev/null
+++ b/src/quickcontrols/ios/SpinBox.qml
@@ -0,0 +1,97 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.iOS.impl
+import QtQuick.Controls.impl
+
+T.SpinBox {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth + 2 * padding +
+ up.implicitIndicatorWidth +
+ down.implicitIndicatorWidth)
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight,
+ down.implicitIndicatorHeight)
+
+ padding: 0
+ leftPadding: control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0)
+ rightPadding: control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0)
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ z: 2
+ text: control.displayText
+ padding: 6
+
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ }
+
+ up.indicator: NinePatchImage {
+ x: control.mirrored ? 0 : control.width - width
+ height: control.height
+ opacity: control.up.indicator.enabled ? 1 : 0.5
+
+ source: IOS.url + "spinbox-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"up": true},
+ {"pressed": control.up.pressed},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ down.indicator: NinePatchImage {
+ x: control.mirrored ? control.width - width : 0
+ height: control.height
+ opacity: control.down.indicator.enabled ? 1 : 0.5
+
+ source: IOS.url + "spinbox-indicator"
+ NinePatchImageSelector on source {
+ states: [
+ {"down": true},
+ {"pressed": control.down.pressed},
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+
+ background: Item {
+ implicitWidth: 150
+ implicitHeight: children[0].implicitHeight
+
+ NinePatchImage {
+ source: IOS.url + "spinbox-background"
+ width: control.background.width
+ height: control.background.height
+ opacity: control.enabled ? 1 : 0.5
+ y: (parent.height - height) / 2
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/SplitView.qml b/src/quickcontrols/ios/SplitView.qml
new file mode 100644
index 0000000000..ab912b86b2
--- /dev/null
+++ b/src/quickcontrols/ios/SplitView.qml
@@ -0,0 +1,25 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.SplitView {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: Rectangle {
+ implicitWidth: control.orientation === Qt.Horizontal ? 1 : control.width
+ implicitHeight: control.orientation === Qt.Horizontal ? control.height : 1
+ color: control.palette.mid
+ // Increase the hit area
+ containmentMask: Item {
+ width: control.orientation === Qt.Horizontal ? 8 : control.width
+ height: control.orientation === Qt.Horizontal ? control.height : 8
+ }
+ }
+}
+
diff --git a/src/quickcontrols/ios/StackView.qml b/src/quickcontrols/ios/StackView.qml
new file mode 100644
index 0000000000..c116ad5227
--- /dev/null
+++ b/src/quickcontrols/ios/StackView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.StackView {
+ id: control
+
+ popEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ popExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * control.width; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ pushEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ pushExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ replaceEnter: Transition {
+ XAnimator { from: (control.mirrored ? -1 : 1) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ replaceExit: Transition {
+ XAnimator { from: 0; to: (control.mirrored ? -1 : 1) * -control.width; duration: 200; easing.type: Easing.OutCubic }
+ }
+}
diff --git a/src/quickcontrols/ios/SwipeDelegate.qml b/src/quickcontrols/ios/SwipeDelegate.qml
new file mode 100644
index 0000000000..ccabfc0cb4
--- /dev/null
+++ b/src/quickcontrols/ios/SwipeDelegate.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+ padding: 7
+ leftPadding: 16
+ rightPadding: 16
+ spacing: 14
+
+ icon.width: 29
+ icon.height: 29
+ icon.color: control.enabled ? control.palette.text : control.palette.mid
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.palette.text : control.palette.mid
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ NinePatchImage {
+ property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0
+ x: control.down ? 0 : control.leftPadding + offset
+ y: control.down ? -1 : 0
+ height: control.height + (control.down ? 1 : 0)
+ width: control.down ? control.width : control.availableWidth + control.rightPadding - offset
+ source: IOS.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"pressed": control.down}
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/Switch.qml b/src/quickcontrols/ios/Switch.qml
new file mode 100644
index 0000000000..7a600afc5f
--- /dev/null
+++ b/src/quickcontrols/ios/Switch.qml
@@ -0,0 +1,79 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 0
+ topInset: 0
+ leftInset: 0
+ rightInset: 0
+ bottomInset: 0
+ spacing: 6
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: implicitWidth
+ height: Math.max(implicitHeight, handle.implicitHeight)
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + "switch-indicator"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"checked": control.checked}
+ ]
+ }
+
+ property NinePatchImage handle: NinePatchImage {
+ property real margin: 2
+ readonly property real minPos: leftPadding - leftInset + margin
+ readonly property real maxPos: parent.width - width + rightPadding + rightInset - margin
+ readonly property real dragPos: control.visualPosition * parent.width - (width / 2)
+
+ parent: control.indicator
+
+ x: Math.max(minPos, Math.min(maxPos, dragPos))
+ y: (parent.height - height) / 2 - topInset + margin
+ width: control.pressed ? implicitWidth + 4 : implicitWidth
+
+ source: IOS.url + "switch-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"disabled": !control.enabled}
+ ]
+ }
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 150 }
+ }
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/ios/SwitchDelegate.qml b/src/quickcontrols/ios/SwitchDelegate.qml
new file mode 100644
index 0000000000..4cba6dcabf
--- /dev/null
+++ b/src/quickcontrols/ios/SwitchDelegate.qml
@@ -0,0 +1,102 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+ padding: 7
+ leftPadding: 16
+ rightPadding: 16
+ spacing: 14
+
+ icon.width: 29
+ icon.height: 29
+ icon.color: control.enabled ? control.palette.text : control.palette.mid
+
+ indicator: Image {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ width: implicitWidth
+ height: Math.max(implicitHeight, handle.implicitHeight)
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + "switch-indicator"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"checked": control.checked}
+ ]
+ }
+
+ property NinePatchImage handle: NinePatchImage {
+ property real margin: 2
+ readonly property real minPos: leftPadding - leftInset + margin
+ readonly property real maxPos: parent.width - width + rightPadding + rightInset - margin
+ readonly property real dragPos: control.visualPosition * parent.width - (width / 2)
+
+ parent: control.indicator
+
+ x: Math.max(minPos, Math.min(maxPos, dragPos))
+ y: (parent.height - height) / 2 - topInset + margin
+ width: control.pressed ? implicitWidth + 4 : implicitWidth
+
+ source: IOS.url + "switch-handle"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ {"disabled": !control.enabled}
+ ]
+ }
+
+ Behavior on x {
+ enabled: !control.down
+ SmoothedAnimation { velocity: 150 }
+ }
+ }
+ }
+
+ contentItem: IconLabel {
+ leftPadding: control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: !control.mirrored ? control.indicator.width + control.spacing : 0
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.palette.text : control.palette.mid
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ NinePatchImage {
+ property real offset: control.icon.source.toString() !== "" ? control.icon.width + control.spacing : 0
+ x: control.leftPadding + offset
+ height: control.height
+ width: control.availableWidth + control.rightPadding - offset
+ source: IOS.url + "itemdelegate-background"
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark},
+ ]
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/TabBar.qml b/src/quickcontrols/ios/TabBar.qml
new file mode 100644
index 0000000000..1d289c71af
--- /dev/null
+++ b/src/quickcontrols/ios/TabBar.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 1
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 0
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 40
+ preferredHighlightEnd: width - 40
+ }
+
+ background: Rectangle {
+ implicitHeight: 49
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ Rectangle {
+ height: 1
+ width: parent.width
+ color: control.palette.mid
+ y: control.position === T.TabBar.Footer ? 0 : parent.height - 1
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/TabButton.qml b/src/quickcontrols/ios/TabButton.qml
new file mode 100644
index 0000000000..0dc84e4f1d
--- /dev/null
+++ b/src/quickcontrols/ios/TabButton.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+ padding: 6
+ spacing: 6
+
+ icon.width: 25
+ icon.height: 25
+ icon.color: checked ? control.palette.button : control.palette.dark
+
+ display: TabButton.TextUnderIcon
+ font.pointSize: 12
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignCenter
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: checked ? control.palette.button : control.palette.dark
+ opacity: control.enabled ? 1 : 0.5
+ }
+
+ background: Item {
+ implicitHeight: 49
+ }
+}
diff --git a/src/quickcontrols/ios/TextArea.qml b/src/quickcontrols/ios/TextArea.qml
new file mode 100644
index 0000000000..582af1bb64
--- /dev/null
+++ b/src/quickcontrols/ios/TextArea.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ leftPadding: 6
+ rightPadding: 6
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+ cursorDelegate: CursorDelegate {}
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitWidth: 240
+ implicitHeight: 128
+ color: control.palette.base
+ }
+}
diff --git a/src/quickcontrols/ios/TextField.qml b/src/quickcontrols/ios/TextField.qml
new file mode 100644
index 0000000000..4b5a1fb48e
--- /dev/null
+++ b/src/quickcontrols/ios/TextField.qml
@@ -0,0 +1,55 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ padding: 6
+ topPadding: 7
+ bottomPadding: 7
+
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ placeholderTextColor: control.palette.placeholderText
+ verticalAlignment: Qt.AlignVCenter
+ cursorDelegate: CursorDelegate {}
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitHeight: 34
+ implicitWidth: 97
+ radius: 4
+
+ border.width: 0.5
+ border.color: control.palette.mid
+ color: control.palette.base
+ }
+}
diff --git a/src/quickcontrols/ios/ToolBar.qml b/src/quickcontrols/ios/ToolBar.qml
new file mode 100644
index 0000000000..77b3d8ac0b
--- /dev/null
+++ b/src/quickcontrols/ios/ToolBar.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitHeight: 49
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.light : control.palette.base
+ Rectangle {
+ height: 1
+ width: parent.width
+ y: control.position === T.TabBar.Footer ? 0 : parent.height - 1
+ color: control.palette.mid
+ }
+ }
+}
diff --git a/src/quickcontrols/ios/ToolButton.qml b/src/quickcontrols/ios/ToolButton.qml
new file mode 100644
index 0000000000..b18073dc81
--- /dev/null
+++ b/src/quickcontrols/ios/ToolButton.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 25
+ icon.height: 25
+ icon.color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? (control.down ? control.palette.highlight : control.palette.button)
+ : control.palette.mid
+ }
+
+ background: Item {
+ implicitHeight: 49
+ }
+}
diff --git a/src/quickcontrols/ios/TreeViewDelegate.qml b/src/quickcontrols/ios/TreeViewDelegate.qml
new file mode 100644
index 0000000000..4dcfcbf39d
--- /dev/null
+++ b/src/quickcontrols/ios/TreeViewDelegate.qml
@@ -0,0 +1,77 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.iOS.impl
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight)
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 16
+ rightMargin: 16
+ spacing: 14
+
+ topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
+ leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
+
+ highlighted: control.selected || control.current
+ || ((control.treeView.selectionBehavior === TableView.SelectRows
+ || control.treeView.selectionBehavior === TableView.SelectionDisabled)
+ && control.row === control.treeView.currentRow)
+
+ required property int row
+ required property var model
+ readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
+
+ indicator: Item {
+ readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
+ x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
+ y: (control.height - height) / 2
+ implicitWidth: Math.max(arrow.implicitWidth, 20)
+ implicitHeight: background.height
+
+ property Image arrow : Image {
+ parent: control.indicator
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0)
+ opacity: control.enabled ? 1 : 0.5
+
+ source: IOS.url + "arrow-indicator"
+ ImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 44
+ color: Qt.styleHints.appearance === Qt.Dark ? control.palette.dark : control.palette.base
+ NinePatchImage {
+ height: parent.height
+ width: parent.width
+ source: IOS.url + (control.highlighted ? "itemdelegate-background-pressed" : "itemdelegate-background")
+ NinePatchImageSelector on source {
+ states: [
+ {"light": Qt.styleHints.appearance === Qt.Light},
+ {"dark": Qt.styleHints.appearance === Qt.Dark}
+ ]
+ }
+ }
+ }
+
+ contentItem: Label {
+ clip: false
+ text: control.model.display
+ elide: Text.ElideRight
+ }
+}
diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark.png b/src/quickcontrols/ios/images/arrow-indicator-dark.png
new file mode 100644
index 0000000000..031ba049b7
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png b/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png
new file mode 100644
index 0000000000..9987384025
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png b/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png
new file mode 100644
index 0000000000..d470ec6887
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/arrow-indicator-light.png b/src/quickcontrols/ios/images/arrow-indicator-light.png
new file mode 100644
index 0000000000..2d95d8d07a
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/arrow-indicator-light@2x.png b/src/quickcontrols/ios/images/arrow-indicator-light@2x.png
new file mode 100644
index 0000000000..cbc4b9e54f
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/arrow-indicator-light@3x.png b/src/quickcontrols/ios/images/arrow-indicator-light@3x.png
new file mode 100644
index 0000000000..be7d45d153
--- /dev/null
+++ b/src/quickcontrols/ios/images/arrow-indicator-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png
new file mode 100644
index 0000000000..4e0749fded
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png
new file mode 100644
index 0000000000..b58cdc18b5
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png
new file mode 100644
index 0000000000..331dbcab14
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png
new file mode 100644
index 0000000000..a2e0cda8f5
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png
new file mode 100644
index 0000000000..d90b64b6b8
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png
new file mode 100644
index 0000000000..d1b02f2004
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-checked-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png
new file mode 100644
index 0000000000..39f8f71d06
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png
new file mode 100644
index 0000000000..5ce5545ee0
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png
new file mode 100644
index 0000000000..0c6da9715a
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png
new file mode 100644
index 0000000000..a6dc7d5d81
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png
new file mode 100644
index 0000000000..1cc0559163
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png
new file mode 100644
index 0000000000..36f007efea
--- /dev/null
+++ b/src/quickcontrols/ios/images/checkbox-indicator-partially-checked-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9.png b/src/quickcontrols/ios/images/drawer-background-dark.9.png
new file mode 100644
index 0000000000..2e0526198e
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png b/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png
new file mode 100644
index 0000000000..2a8b3b60e3
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-dark.9@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png b/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png
new file mode 100644
index 0000000000..19805fbd19
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-dark.9@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-light.9.png b/src/quickcontrols/ios/images/drawer-background-light.9.png
new file mode 100644
index 0000000000..9c8a42bcc4
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-light.9@2x.png b/src/quickcontrols/ios/images/drawer-background-light.9@2x.png
new file mode 100644
index 0000000000..9975339c29
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-light.9@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-light.9@3x.png b/src/quickcontrols/ios/images/drawer-background-light.9@3x.png
new file mode 100644
index 0000000000..83d723b573
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-light.9@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png
new file mode 100644
index 0000000000..3ff175251b
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png
new file mode 100644
index 0000000000..54770858f1
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png
new file mode 100644
index 0000000000..f5747ebdfe
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-dark.9@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9.png
new file mode 100644
index 0000000000..ea4e753269
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png
new file mode 100644
index 0000000000..109fda953c
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png b/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png
new file mode 100644
index 0000000000..02a52acf5f
--- /dev/null
+++ b/src/quickcontrols/ios/images/drawer-background-modal-light.9@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png
new file mode 100644
index 0000000000..73f3ad8825
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png
new file mode 100644
index 0000000000..5a4f22b3f9
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png
new file mode 100644
index 0000000000..92f36a96d1
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light.9.png
new file mode 100644
index 0000000000..162821415e
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png
new file mode 100644
index 0000000000..b14617e04f
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png
new file mode 100644
index 0000000000..6f2df3a583
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png
new file mode 100644
index 0000000000..4ca285bbbe
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..6ddb779bca
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..6e9c02e288
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png
new file mode 100644
index 0000000000..b9b2ea03bb
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png
new file mode 100644
index 0000000000..141272953d
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png
new file mode 100644
index 0000000000..7201fb9e62
--- /dev/null
+++ b/src/quickcontrols/ios/images/itemdelegate-background-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-dark.9.png b/src/quickcontrols/ios/images/menu-background-dark.9.png
new file mode 100644
index 0000000000..863a3c1759
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-dark@2x.9.png b/src/quickcontrols/ios/images/menu-background-dark@2x.9.png
new file mode 100644
index 0000000000..ddddaa3532
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-dark@3x.9.png b/src/quickcontrols/ios/images/menu-background-dark@3x.9.png
new file mode 100644
index 0000000000..a640f6fe06
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-light.9.png b/src/quickcontrols/ios/images/menu-background-light.9.png
new file mode 100644
index 0000000000..410abed278
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-light@2x.9.png b/src/quickcontrols/ios/images/menu-background-light@2x.9.png
new file mode 100644
index 0000000000..82d99af518
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menu-background-light@3x.9.png b/src/quickcontrols/ios/images/menu-background-light@3x.9.png
new file mode 100644
index 0000000000..48f3f7ed4e
--- /dev/null
+++ b/src/quickcontrols/ios/images/menu-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-dark.9.png
new file mode 100644
index 0000000000..463def221b
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png
new file mode 100644
index 0000000000..53fdaa7c35
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png
new file mode 100644
index 0000000000..a514f80071
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png
new file mode 100644
index 0000000000..514c0901e6
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png
new file mode 100644
index 0000000000..1ca1ee8d9e
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png
new file mode 100644
index 0000000000..6a4277a7c3
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png
new file mode 100644
index 0000000000..262c12d7b7
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png
new file mode 100644
index 0000000000..4838abb511
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png
new file mode 100644
index 0000000000..0e17b608da
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png
new file mode 100644
index 0000000000..290101b99b
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..a738f20650
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..ef05342d0b
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png
new file mode 100644
index 0000000000..706f642552
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png
new file mode 100644
index 0000000000..e196a71bbe
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png
new file mode 100644
index 0000000000..4f5a71ff86
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-edge-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-light.9.png b/src/quickcontrols/ios/images/menuitem-background-light.9.png
new file mode 100644
index 0000000000..644f207a26
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png
new file mode 100644
index 0000000000..d7c78cb5dc
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png
new file mode 100644
index 0000000000..70ce76a961
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png
new file mode 100644
index 0000000000..4f1fdfc82c
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..f72729f45d
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..eaa574174b
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png
new file mode 100644
index 0000000000..5141095a95
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png
new file mode 100644
index 0000000000..b8fb91997f
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png
new file mode 100644
index 0000000000..250247d322
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png
new file mode 100644
index 0000000000..708285fe39
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..0cb6f175ff
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..cb7c1f210c
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png
new file mode 100644
index 0000000000..5a71309c91
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png
new file mode 100644
index 0000000000..7798409aa3
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png
new file mode 100644
index 0000000000..77a69bd247
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuitem-background-single-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png
new file mode 100644
index 0000000000..819e465354
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png
new file mode 100644
index 0000000000..81e3cdd391
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png
new file mode 100644
index 0000000000..95d88ee659
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light.9.png
new file mode 100644
index 0000000000..46276666e2
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png
new file mode 100644
index 0000000000..0e2b9986a9
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png b/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png
new file mode 100644
index 0000000000..d3eb183bf3
--- /dev/null
+++ b/src/quickcontrols/ios/images/menuseparator-separator-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png
new file mode 100644
index 0000000000..8f51025a25
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png
new file mode 100644
index 0000000000..434b0e295c
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png
new file mode 100644
index 0000000000..3d89f00f1a
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png
new file mode 100644
index 0000000000..ab9a27a6c5
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png
new file mode 100644
index 0000000000..94b23004e9
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png
new file mode 100644
index 0000000000..24229b4cbf
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-current-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark.png
new file mode 100644
index 0000000000..560c3be532
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png
new file mode 100644
index 0000000000..5159b47d56
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png
new file mode 100644
index 0000000000..979badf935
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light.png b/src/quickcontrols/ios/images/pageindicator-delegate-light.png
new file mode 100644
index 0000000000..65bd5ad63c
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png b/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png
new file mode 100644
index 0000000000..7bd65b8105
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png b/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png
new file mode 100644
index 0000000000..a46d8668dc
--- /dev/null
+++ b/src/quickcontrols/ios/images/pageindicator-delegate-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-dark.9.png b/src/quickcontrols/ios/images/popup-background-dark.9.png
new file mode 100644
index 0000000000..9afd3ab0ce
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-dark@2x.9.png b/src/quickcontrols/ios/images/popup-background-dark@2x.9.png
new file mode 100644
index 0000000000..115908f4e0
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-dark@3x.9.png b/src/quickcontrols/ios/images/popup-background-dark@3x.9.png
new file mode 100644
index 0000000000..2377c6f5d7
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-light.9.png b/src/quickcontrols/ios/images/popup-background-light.9.png
new file mode 100644
index 0000000000..c06ec445cc
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-light@2x.9.png b/src/quickcontrols/ios/images/popup-background-light@2x.9.png
new file mode 100644
index 0000000000..0de7471cf0
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/popup-background-light@3x.9.png b/src/quickcontrols/ios/images/popup-background-light@3x.9.png
new file mode 100644
index 0000000000..04fa3cc354
--- /dev/null
+++ b/src/quickcontrols/ios/images/popup-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png
new file mode 100644
index 0000000000..f8ac628b14
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png
new file mode 100644
index 0000000000..6cdbb278a6
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png
new file mode 100644
index 0000000000..9375a40623
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png
new file mode 100644
index 0000000000..b17f80c522
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png
new file mode 100644
index 0000000000..7cbaa12bfb
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png
new file mode 100644
index 0000000000..e10579c6e8
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-checked-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark.png
new file mode 100644
index 0000000000..bede4a1bce
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png
new file mode 100644
index 0000000000..3eacdfd0b5
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png
new file mode 100644
index 0000000000..0098efdc9d
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light.png b/src/quickcontrols/ios/images/radiobutton-indicator-light.png
new file mode 100644
index 0000000000..44b999c4f0
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png b/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png
new file mode 100644
index 0000000000..1dda163af5
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png b/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png
new file mode 100644
index 0000000000..e303d37fd0
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiobutton-indicator-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png
new file mode 100644
index 0000000000..8a658b26d6
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png
new file mode 100644
index 0000000000..2477fa99a5
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png
new file mode 100644
index 0000000000..4bf7b4c7cd
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light.png
new file mode 100644
index 0000000000..f826b9e766
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png
new file mode 100644
index 0000000000..9b5d5dbed2
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png b/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png
new file mode 100644
index 0000000000..0470240580
--- /dev/null
+++ b/src/quickcontrols/ios/images/radiodelegate-indicator-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png
new file mode 100644
index 0000000000..8a77ce365c
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png
new file mode 100644
index 0000000000..b7c68e90df
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png
new file mode 100644
index 0000000000..6c913d0edb
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png
new file mode 100644
index 0000000000..3172c935cc
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png
new file mode 100644
index 0000000000..e61822c035
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png
new file mode 100644
index 0000000000..4f2b6734ea
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-dark-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png
new file mode 100644
index 0000000000..8a77ce365c
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png
new file mode 100644
index 0000000000..b7c68e90df
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png
new file mode 100644
index 0000000000..6c913d0edb
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-horizontal@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png
new file mode 100644
index 0000000000..3172c935cc
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png
new file mode 100644
index 0000000000..e61822c035
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png
new file mode 100644
index 0000000000..4f2b6734ea
--- /dev/null
+++ b/src/quickcontrols/ios/images/scrollindicator-handle-light-vertical@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-dark.9.png b/src/quickcontrols/ios/images/slider-background-dark.9.png
new file mode 100644
index 0000000000..fd53274888
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-dark@2x.9.png b/src/quickcontrols/ios/images/slider-background-dark@2x.9.png
new file mode 100644
index 0000000000..ff91196972
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-dark@3x.9.png b/src/quickcontrols/ios/images/slider-background-dark@3x.9.png
new file mode 100644
index 0000000000..98b2e63cfb
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-light.9.png b/src/quickcontrols/ios/images/slider-background-light.9.png
new file mode 100644
index 0000000000..5970f421ea
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-light@2x.9.png b/src/quickcontrols/ios/images/slider-background-light@2x.9.png
new file mode 100644
index 0000000000..5a03521004
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-background-light@3x.9.png b/src/quickcontrols/ios/images/slider-background-light@3x.9.png
new file mode 100644
index 0000000000..39b2fe1968
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png
new file mode 100644
index 0000000000..5c2666a2b7
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png
new file mode 100644
index 0000000000..a33d6625b4
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png
new file mode 100644
index 0000000000..47dcc3183e
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png
new file mode 100644
index 0000000000..be3f21dcb1
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png
new file mode 100644
index 0000000000..9e73aec4fd
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png b/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png
new file mode 100644
index 0000000000..35ad327fbe
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle-disabled-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle.9.png b/src/quickcontrols/ios/images/slider-handle.9.png
new file mode 100644
index 0000000000..ed9894b60f
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle@2x.9.png b/src/quickcontrols/ios/images/slider-handle@2x.9.png
new file mode 100644
index 0000000000..f76e4fe945
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-handle@3x.9.png b/src/quickcontrols/ios/images/slider-handle@3x.9.png
new file mode 100644
index 0000000000..a6a9fe33f9
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-handle@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-dark.9.png b/src/quickcontrols/ios/images/slider-progress-dark.9.png
new file mode 100644
index 0000000000..e41ced1a0e
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png b/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png
new file mode 100644
index 0000000000..3be5c17f0d
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png b/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png
new file mode 100644
index 0000000000..58a21bce2e
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-light.9.png b/src/quickcontrols/ios/images/slider-progress-light.9.png
new file mode 100644
index 0000000000..764b273756
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-light@2x.9.png b/src/quickcontrols/ios/images/slider-progress-light@2x.9.png
new file mode 100644
index 0000000000..59fd8395e1
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/slider-progress-light@3x.9.png b/src/quickcontrols/ios/images/slider-progress-light@3x.9.png
new file mode 100644
index 0000000000..0294770364
--- /dev/null
+++ b/src/quickcontrols/ios/images/slider-progress-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-dark.9.png b/src/quickcontrols/ios/images/spinbox-background-dark.9.png
new file mode 100644
index 0000000000..429d5dda7f
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png
new file mode 100644
index 0000000000..acb8f3df35
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png
new file mode 100644
index 0000000000..ea798e64aa
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-light.9.png b/src/quickcontrols/ios/images/spinbox-background-light.9.png
new file mode 100644
index 0000000000..a831906778
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png
new file mode 100644
index 0000000000..467cef5b94
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png
new file mode 100644
index 0000000000..5afa6c9232
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-background-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png
new file mode 100644
index 0000000000..989eb661cb
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png
new file mode 100644
index 0000000000..a22f19bf3d
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png
new file mode 100644
index 0000000000..1e0d12afbc
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png
new file mode 100644
index 0000000000..10b614e8e5
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png
new file mode 100644
index 0000000000..48fedbe21d
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png
new file mode 100644
index 0000000000..1254e56ddf
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png
new file mode 100644
index 0000000000..1f279f6eef
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..dbbb584f10
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..78ced50148
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png
new file mode 100644
index 0000000000..46f9ddbcf5
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png
new file mode 100644
index 0000000000..ad6573bbfa
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png
new file mode 100644
index 0000000000..0fec10338b
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-down-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png
new file mode 100644
index 0000000000..ca688ef523
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png
new file mode 100644
index 0000000000..970ea1e89e
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png
new file mode 100644
index 0000000000..2ae2dddf45
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png
new file mode 100644
index 0000000000..ca8afb87ae
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png
new file mode 100644
index 0000000000..4c434039e7
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png
new file mode 100644
index 0000000000..3302d3f6d6
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png
new file mode 100644
index 0000000000..15426b4ce6
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png
new file mode 100644
index 0000000000..6295a5ed2c
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png
new file mode 100644
index 0000000000..bdaa739803
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png
new file mode 100644
index 0000000000..09b8ad162c
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png
new file mode 100644
index 0000000000..2ec793c747
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png
new file mode 100644
index 0000000000..95e19eb2af
--- /dev/null
+++ b/src/quickcontrols/ios/images/spinbox-indicator-up-pressed-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png
new file mode 100644
index 0000000000..11f229c8ef
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png
new file mode 100644
index 0000000000..7a030a4232
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png
new file mode 100644
index 0000000000..59b2b0a3e1
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-dark@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png
new file mode 100644
index 0000000000..12a3b4ef6a
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-light.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png
new file mode 100644
index 0000000000..dedcb7f4eb
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-light@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png b/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png
new file mode 100644
index 0000000000..8daf9e7a96
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle-disabled-light@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle.9.png b/src/quickcontrols/ios/images/switch-handle.9.png
new file mode 100644
index 0000000000..8112808a81
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle@2x.9.png b/src/quickcontrols/ios/images/switch-handle@2x.9.png
new file mode 100644
index 0000000000..4767588b3b
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle@2x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-handle@3x.9.png b/src/quickcontrols/ios/images/switch-handle@3x.9.png
new file mode 100644
index 0000000000..af4bcd06f8
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-handle@3x.9.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark.png
new file mode 100644
index 0000000000..c72622096d
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png
new file mode 100644
index 0000000000..0275dc140e
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png b/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png
new file mode 100644
index 0000000000..9b8684219e
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light.png b/src/quickcontrols/ios/images/switch-indicator-checked-light.png
new file mode 100644
index 0000000000..5633ce2816
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png b/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png
new file mode 100644
index 0000000000..6859b04326
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png b/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png
new file mode 100644
index 0000000000..3181f82f80
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-checked-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-dark.png b/src/quickcontrols/ios/images/switch-indicator-dark.png
new file mode 100644
index 0000000000..939cd4e780
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-dark.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-dark@2x.png b/src/quickcontrols/ios/images/switch-indicator-dark@2x.png
new file mode 100644
index 0000000000..294e4e6621
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-dark@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-dark@3x.png b/src/quickcontrols/ios/images/switch-indicator-dark@3x.png
new file mode 100644
index 0000000000..500c2891cb
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-dark@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-light.png b/src/quickcontrols/ios/images/switch-indicator-light.png
new file mode 100644
index 0000000000..250cf0d99c
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-light.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-light@2x.png b/src/quickcontrols/ios/images/switch-indicator-light@2x.png
new file mode 100644
index 0000000000..08886b2004
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-light@2x.png
Binary files differ
diff --git a/src/quickcontrols/ios/images/switch-indicator-light@3x.png b/src/quickcontrols/ios/images/switch-indicator-light@3x.png
new file mode 100644
index 0000000000..ec2c8dfadc
--- /dev/null
+++ b/src/quickcontrols/ios/images/switch-indicator-light@3x.png
Binary files differ
diff --git a/src/quickcontrols/ios/impl/CMakeLists.txt b/src/quickcontrols/ios/impl/CMakeLists.txt
new file mode 100644
index 0000000000..e298335bb1
--- /dev/null
+++ b/src/quickcontrols/ios/impl/CMakeLists.txt
@@ -0,0 +1,27 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2iosstyleimplplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "CursorDelegate.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2iosstyleimplplugin
+ URI "QtQuick.Controls.iOS.impl"
+ VERSION "${PROJECT_VERSION}"
+ PLUGIN_TARGET qtquickcontrols2iosstyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ SOURCES
+ qquickiosstyle.cpp qquickiosstyle_p.h
+ qquickioscursorflashtimer_p.h qquickioscursorflashtimer.cpp
+ QML_FILES
+ ${qml_files}
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickPrivate
+)
diff --git a/src/quickcontrols/ios/impl/CursorDelegate.qml b/src/quickcontrols/ios/impl/CursorDelegate.qml
new file mode 100644
index 0000000000..9b675afeb2
--- /dev/null
+++ b/src/quickcontrols/ios/impl/CursorDelegate.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.iOS.impl
+
+Rectangle {
+ id: cursor
+
+ color: "#426bf2"
+ width: 2
+ radius: 1
+ visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd
+
+ opacity: timer.visible ? 1 : 0
+
+ CursorFlashTimer {
+ id: timer
+ cursorPosition: cursor.parent.cursorPosition
+ running: cursor.parent.activeFocus && !cursor.parent.readOnly
+ }
+}
diff --git a/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp b/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp
new file mode 100644
index 0000000000..8ae88b2a90
--- /dev/null
+++ b/src/quickcontrols/ios/impl/qquickioscursorflashtimer.cpp
@@ -0,0 +1,79 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickioscursorflashtimer_p.h"
+#include <QtGui/qguiapplication.h>
+#include <QtGui/qstylehints.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickIOSCursorFlashTimer::QQuickIOSCursorFlashTimer(QObject *parent)
+ : QObject(parent)
+{
+}
+
+bool QQuickIOSCursorFlashTimer::visible() const
+{
+ return m_visible;
+}
+
+void QQuickIOSCursorFlashTimer::setVisible(bool visible)
+{
+ if (m_visible == visible)
+ return;
+ m_visible = visible;
+ emit visibleChanged();
+}
+
+int QQuickIOSCursorFlashTimer::cursorPosition() const
+{
+ return m_cursorPosition;
+}
+
+void QQuickIOSCursorFlashTimer::setCursorPosition(int cursorPosition)
+{
+ if (m_cursorPosition == cursorPosition)
+ return;
+ m_cursorPosition = cursorPosition;
+ emit cursorPositionChanged();
+ start();
+}
+
+bool QQuickIOSCursorFlashTimer::running() const
+{
+ return m_running;
+}
+
+void QQuickIOSCursorFlashTimer::setRunning(bool running)
+{
+ if (running == m_running)
+ return;
+ m_running = running;
+ emit runningChanged(m_running);
+ if (!running) {
+ stop();
+ setVisible(false);
+ } else {
+ start();
+ }
+}
+
+void QQuickIOSCursorFlashTimer::start()
+{
+ stop();
+ m_timer = startTimer(QGuiApplication::styleHints()->cursorFlashTime() / 2);
+}
+
+void QQuickIOSCursorFlashTimer::stop()
+{
+ killTimer(m_timer);
+ m_timer = 0;
+}
+
+void QQuickIOSCursorFlashTimer::timerEvent(QTimerEvent *event)
+{
+ if (event->timerId() == m_timer)
+ setVisible(!visible());
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h b/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h
new file mode 100644
index 0000000000..46e73ecb64
--- /dev/null
+++ b/src/quickcontrols/ios/impl/qquickioscursorflashtimer_p.h
@@ -0,0 +1,62 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKIOSCURSORFLASHTIMER_P_H
+#define QQUICKIOSCURSORFLASHTIMER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQml/qqml.h>
+#include <QtCore/qobject.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickIOSCursorFlashTimer : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged FINAL)
+ Q_PROPERTY(int cursorPosition READ cursorPosition WRITE setCursorPosition NOTIFY cursorPositionChanged FINAL)
+ Q_PROPERTY(bool running READ running WRITE setRunning NOTIFY runningChanged FINAL)
+ QML_NAMED_ELEMENT(CursorFlashTimer)
+
+public:
+ explicit QQuickIOSCursorFlashTimer(QObject *parent = nullptr);
+
+ bool visible() const;
+ void setVisible(bool visible);
+
+ int cursorPosition() const;
+ void setCursorPosition(int cursorPosition);
+
+ bool running() const;
+ void setRunning(bool running);
+
+ void start();
+ void stop();
+
+ void timerEvent(QTimerEvent *event) override;
+
+Q_SIGNALS:
+ void visibleChanged();
+ void cursorPositionChanged();
+ void runningChanged(bool running);
+
+private:
+ bool m_visible = false;
+ int m_cursorPosition = 0;
+ int m_timer = 0;
+ bool m_running = false;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKIOSCURSORFLASHTIMER_P_H
diff --git a/src/quickcontrols/ios/impl/qquickiosstyle.cpp b/src/quickcontrols/ios/impl/qquickiosstyle.cpp
new file mode 100644
index 0000000000..cfbbfd69f5
--- /dev/null
+++ b/src/quickcontrols/ios/impl/qquickiosstyle.cpp
@@ -0,0 +1,20 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickiosstyle_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_GLOBAL_STATIC_WITH_ARGS(QString, GlobalPath, (QLatin1String("qrc:/qt-project.org/imports/QtQuick/Controls/iOS/images/")))
+
+QQuickIOSStyle::QQuickIOSStyle(QObject *parent)
+ : QObject(parent)
+{
+}
+
+QUrl QQuickIOSStyle::url()
+{
+ return *GlobalPath();
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/ios/impl/qquickiosstyle_p.h b/src/quickcontrols/ios/impl/qquickiosstyle_p.h
new file mode 100644
index 0000000000..03144751ad
--- /dev/null
+++ b/src/quickcontrols/ios/impl/qquickiosstyle_p.h
@@ -0,0 +1,39 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKIOSSTYLE_P_H
+#define QQUICKIOSSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qobject.h>
+#include <QtQml/qqml.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickIOSStyle : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(QUrl url READ url CONSTANT)
+ QML_NAMED_ELEMENT(IOS)
+ QML_SINGLETON
+ QML_ADDED_IN_VERSION(6, 5)
+
+public:
+ explicit QQuickIOSStyle(QObject *parent = nullptr);
+
+ static QUrl url();
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKIOSSTYLE_P_H
diff --git a/src/quickcontrols/ios/qquickiostheme.mm b/src/quickcontrols/ios/qquickiostheme.mm
new file mode 100644
index 0000000000..9c58e68d9d
--- /dev/null
+++ b/src/quickcontrols/ios/qquickiostheme.mm
@@ -0,0 +1,82 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickiostheme_p.h"
+
+#include <QtGui/private/qcoregraphics_p.h>
+
+#ifdef Q_OS_IOS
+#include <UIKit/UIInterface.h>
+#endif
+
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QQuickIOSTheme::initialize(QQuickTheme *theme)
+{
+ QPalette systemPalette;
+
+ QColor window;
+ QColor windowText;
+ QColor background;
+ QColor placeholderText;
+ QColor button;
+ QColor disabledButton;
+ QColor white;
+ QColor lightGray;
+ QColor gray;
+ QColor darkGray;
+#ifdef Q_OS_IOS
+ window = qt_mac_toQColor(UIColor.systemGroupedBackgroundColor.CGColor);
+ windowText = qt_mac_toQColor(UIColor.labelColor.CGColor);
+ background = qt_mac_toQColor(UIColor.systemBackgroundColor.CGColor);
+ placeholderText = qt_mac_toQColor(UIColor.placeholderTextColor.CGColor);
+ button = qt_mac_toQColor(UIColor.systemBlueColor.CGColor);
+ disabledButton = qt_mac_toQColor(UIColor.tertiarySystemFillColor.CGColor);
+ white = qt_mac_toQColor(UIColor.whiteColor.CGColor);
+ lightGray = qt_mac_toQColor(UIColor.systemGray6Color.CGColor);
+ gray = qt_mac_toQColor(UIColor.opaqueSeparatorColor.CGColor);
+ darkGray = qt_mac_toQColor(UIColor.systemGrayColor.CGColor);
+#else
+ bool isDarkSystemTheme = QQuickStylePrivate::isDarkSystemTheme();
+ window = isDarkSystemTheme ? QColor(qRgba(0, 0, 0, 255)) : QColor(qRgba(242, 242, 247, 255));
+ windowText = isDarkSystemTheme ? QColor(Qt::white) : QColor(Qt::black);
+ background = isDarkSystemTheme ? QColor(Qt::black) : QColor(Qt::white);
+ placeholderText = isDarkSystemTheme ? QColor(qRgba(235, 235, 245, 77)) : QColor(qRgba(60, 60, 67, 77));
+ button = isDarkSystemTheme ? QColor(qRgba(10, 132, 255, 255)) : QColor(qRgba(0, 122, 255, 255));
+ disabledButton = isDarkSystemTheme ? QColor(qRgba(118, 118, 128, 61)) : QColor(qRgba(118, 118, 128, 31));
+ white = QColor(Qt::white);
+ lightGray = isDarkSystemTheme ? QColor(qRgba(28, 28, 30, 255)) : QColor(qRgba(242, 242, 247, 255));
+ gray = isDarkSystemTheme ? QColor(qRgba(56, 56, 58, 255)) : QColor(qRgba(198, 198, 200, 2555));
+ darkGray = QColor(qRgba(142, 142, 147, 255));
+#endif
+ systemPalette.setColor(QPalette::Window, window);
+
+ systemPalette.setColor(QPalette::Active, QPalette::WindowText, windowText);
+ systemPalette.setColor(QPalette::Disabled, QPalette::WindowText, darkGray);
+
+ systemPalette.setColor(QPalette::Base, background);
+
+ systemPalette.setColor(QPalette::PlaceholderText, placeholderText);
+
+ systemPalette.setColor(QPalette::Button, button);
+ systemPalette.setColor(QPalette::Disabled, QPalette::Button, disabledButton);
+
+ systemPalette.setColor(QPalette::ButtonText, white);
+ white.setAlphaF(0.5);
+ systemPalette.setColor(QPalette::Disabled, QPalette::ButtonText, white);
+
+ button.setAlphaF(0.8);
+ systemPalette.setColor(QPalette::Highlight, button);
+
+ systemPalette.setColor(QPalette::Light, lightGray);
+ systemPalette.setColor(QPalette::Mid, gray);
+ systemPalette.setColor(QPalette::Dark, darkGray);
+
+ theme->setPalette(QQuickTheme::System, systemPalette);
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/quickcontrols/ios/qquickiostheme_p.h b/src/quickcontrols/ios/qquickiostheme_p.h
new file mode 100644
index 0000000000..e85de7e439
--- /dev/null
+++ b/src/quickcontrols/ios/qquickiostheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKIOSTHEME_P_H
+#define QQUICKIOSTHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qglobal.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickIOSTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKIOSTHEME_P_H
diff --git a/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp b/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp
new file mode 100644
index 0000000000..87110a9936
--- /dev/null
+++ b/src/quickcontrols/ios/qtquickcontrols2iosstyleplugin.cpp
@@ -0,0 +1,55 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickiostheme_p.h"
+
+#include <QtCore/qloggingcategory.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_iOS();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_iOS);
+
+class QtQuickControls2IOSStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2IOSStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+ void updateTheme() override;
+
+ QQuickIOSTheme m_theme;
+};
+
+QtQuickControls2IOSStylePlugin::QtQuickControls2IOSStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_iOS;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2IOSStylePlugin::name() const
+{
+ return QStringLiteral("iOS");
+}
+
+void QtQuickControls2IOSStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ m_theme.initialize(theme);
+}
+
+void QtQuickControls2IOSStylePlugin::updateTheme()
+{
+ QQuickTheme *theme = QQuickTheme::instance();
+ m_theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2iosstyleplugin.moc"
diff --git a/src/quickcontrols/macos/Button.qml b/src/quickcontrols/macos/Button.qml
new file mode 100644
index 0000000000..5fa56c2b13
--- /dev/null
+++ b/src/quickcontrols/macos/Button.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultButton {
+ id: control
+ readonly property Item __focusFrameTarget: control
+
+ font.pixelSize: background.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/CMakeLists.txt b/src/quickcontrols/macos/CMakeLists.txt
new file mode 100644
index 0000000000..f0a3dcd3f4
--- /dev/null
+++ b/src/quickcontrols/macos/CMakeLists.txt
@@ -0,0 +1,66 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2macosstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "Button.qml"
+ "Slider.qml"
+ "GroupBox.qml"
+ "CheckBox.qml"
+ "RadioButton.qml"
+ "SelectionRectangle.qml"
+ "SpinBox.qml"
+ "TextField.qml"
+ "Frame.qml"
+ "TextArea.qml"
+ "ComboBox.qml"
+ "ScrollView.qml"
+ "ScrollBar.qml"
+ "ProgressBar.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+)
+
+if (QT_FEATURE_quick_treeview)
+ list(APPEND qml_files
+ "TreeViewDelegate.qml"
+ )
+endif()
+
+qt_internal_add_qml_module(qtquickcontrols2macosstyleplugin
+ URI "QtQuick.Controls.macOS"
+ VERSION "${PROJECT_VERSION}"
+ CLASS_NAME QtQuickControls2MacOSStylePlugin
+ IMPORTS
+ QtQuick.Controls.Fusion/auto
+ PAST_MAJOR_VERSIONS 2
+ PLUGIN_TARGET qtquickcontrols2macosstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qtquickcontrols2macosstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+# Native style is a dependency of the macOS style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2macosstyleplugin
+ qtquickcontrols2nativestyleplugin)
+
+# Fusion style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2macosstyleplugin
+ qtquickcontrols2fusionstyleplugin)
diff --git a/src/quickcontrols/macos/CheckBox.qml b/src/quickcontrols/macos/CheckBox.qml
new file mode 100644
index 0000000000..09756cb594
--- /dev/null
+++ b/src/quickcontrols/macos/CheckBox.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultCheckBox {
+ id: control
+ readonly property Item __focusFrameTarget: indicator
+ readonly property Item __focusFrameStyleItem: indicator
+
+ font.pixelSize: indicator.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/ComboBox.qml b/src/quickcontrols/macos/ComboBox.qml
new file mode 100644
index 0000000000..4ea2012382
--- /dev/null
+++ b/src/quickcontrols/macos/ComboBox.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultComboBox {
+ id: control
+ readonly property Item __focusFrameTarget: control
+ font.pixelSize: background.styleFont(control).pixelSize
+
+ contentItem: T.TextField {
+ implicitWidth: contentWidth
+ implicitHeight: contentHeight
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+
+ readonly property Item __focusFrameControl: control
+ }
+}
diff --git a/src/quickcontrols/macos/Dial.qml b/src/quickcontrols/macos/Dial.qml
new file mode 100644
index 0000000000..f0cbf9c691
--- /dev/null
+++ b/src/quickcontrols/macos/Dial.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultDial {
+ id: control
+ font.pixelSize: background.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/Dialog.qml b/src/quickcontrols/macos/Dialog.qml
new file mode 100644
index 0000000000..69e9d9bf46
--- /dev/null
+++ b/src/quickcontrols/macos/Dialog.qml
@@ -0,0 +1,70 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.macOS
+// We want to use the Fusion style's Dialog and DialogButtonBox implementation,
+// (at least until we come up with macOS styling for them) but our
+// Button implementation, so both are copied from Fusion.
+import QtQuick.Controls.Fusion.impl
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ padding: 6
+
+ background: Rectangle {
+ color: control.palette.window
+ border.color: control.palette.mid
+ radius: 2
+
+ Rectangle {
+ x: 1
+ y: 1
+ z: -1
+ width: parent.width
+ height: parent.height
+ color: control.palette.shadow
+ opacity: 0.2
+ radius: 2
+ }
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ font.bold: true
+ padding: 6
+ background: Rectangle {
+ x: 1
+ y: 1
+ width: parent.width - 2
+ height: parent.height - 1
+ color: control.palette.window
+ radius: 2
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: Fusion.topShadow
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: Fusion.topShadow
+ }
+}
diff --git a/src/quickcontrols/macos/DialogButtonBox.qml b/src/quickcontrols/macos/DialogButtonBox.qml
new file mode 100644
index 0000000000..b99de3354c
--- /dev/null
+++ b/src/quickcontrols/macos/DialogButtonBox.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 6
+ alignment: Qt.AlignRight
+
+ delegate: Button { }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: Rectangle {
+ x: 1
+ y: 1
+ implicitHeight: 32
+ width: parent.width - 2
+ height: parent.height - 2
+ color: control.palette.window
+ radius: 2
+ }
+}
diff --git a/src/quickcontrols/macos/Frame.qml b/src/quickcontrols/macos/Frame.qml
new file mode 100644
index 0000000000..bb37d8aa26
--- /dev/null
+++ b/src/quickcontrols/macos/Frame.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultFrame {
+}
diff --git a/src/quickcontrols/macos/GroupBox.qml b/src/quickcontrols/macos/GroupBox.qml
new file mode 100644
index 0000000000..38c82891a1
--- /dev/null
+++ b/src/quickcontrols/macos/GroupBox.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultGroupBox {
+ id: control
+ font.pixelSize: background.styleFont(control).pixelSize
+ label: Item {
+ readonly property point labelPos : control.__nativeBackground
+ ? background.labelPos
+ : Qt.point(0,0)
+ x: labelPos.x + background.x
+ y: labelPos.y + background.y - (control.__nativeBackground ? background.groupBoxPadding.top : 0)
+ width: children[0].implicitWidth
+ height: children[0].implicitHeight
+ Text {
+ width: parent.width
+ height: parent.height
+ text: control.title
+ font: control.font
+ color: control.palette.windowText
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+}
diff --git a/src/quickcontrols/macos/ProgressBar.qml b/src/quickcontrols/macos/ProgressBar.qml
new file mode 100644
index 0000000000..66456e029e
--- /dev/null
+++ b/src/quickcontrols/macos/ProgressBar.qml
@@ -0,0 +1,10 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultProgressBar {
+ id: control
+ font.pixelSize: background.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/RadioButton.qml b/src/quickcontrols/macos/RadioButton.qml
new file mode 100644
index 0000000000..56d1e537a4
--- /dev/null
+++ b/src/quickcontrols/macos/RadioButton.qml
@@ -0,0 +1,12 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultRadioButton {
+ id: control
+ readonly property Item __focusFrameTarget: indicator
+ readonly property Item __focusFrameStyleItem: indicator
+ font.pixelSize: indicator.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/ScrollBar.qml b/src/quickcontrols/macos/ScrollBar.qml
new file mode 100644
index 0000000000..15235ffc83
--- /dev/null
+++ b/src/quickcontrols/macos/ScrollBar.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultScrollBar {
+ id: controlRoot
+ font.pixelSize: background.styleFont(controlRoot).pixelSize
+
+ contentItem: NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.Handle
+ overrideState: NativeStyle.ScrollBar.NeverHovered
+ opacity: 0.5
+ }
+
+ NativeStyle.ScrollBar {
+ // Fade a hovered-looking version of the handle
+ // on top of the default handle when hovering it
+ x: contentItem.x
+ y: contentItem.y
+ width: contentItem.width
+ height: contentItem.height
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.Handle
+ overrideState: NativeStyle.StyleItem.AlwaysHovered
+ opacity: controlRoot.hovered || control.pressed ? 0.5 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } }
+ }
+
+}
diff --git a/src/quickcontrols/macos/ScrollView.qml b/src/quickcontrols/macos/ScrollView.qml
new file mode 100644
index 0000000000..594406fa55
--- /dev/null
+++ b/src/quickcontrols/macos/ScrollView.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.NativeStyle as NativeStyle
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0
+ bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: 0
+ height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0)
+ active: control.ScrollBar.horizontal.active
+
+ NativeStyle.ScrollViewCorner {
+ y: parent.height
+ control: control
+ visible: control.ScrollBar.horizontal.visible
+ useNinePatchImage: false
+ }
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: 0
+ y: control.height - height
+ width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0)
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/macos/SelectionRectangle.qml b/src/quickcontrols/macos/SelectionRectangle.qml
new file mode 100644
index 0000000000..8efadd8e31
--- /dev/null
+++ b/src/quickcontrols/macos/SelectionRectangle.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Shapes
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+
+ bottomRightHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+
+}
diff --git a/src/quickcontrols/macos/Slider.qml b/src/quickcontrols/macos/Slider.qml
new file mode 100644
index 0000000000..33db57b16c
--- /dev/null
+++ b/src/quickcontrols/macos/Slider.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultSlider {
+ id: control
+ readonly property Item __focusFrameTarget: handle
+ readonly property Item __focusFrameStyleItem: handle
+ font.pixelSize: background.styleFont(control).pixelSize
+
+ background: NativeStyle.Slider {
+ control: control
+ subControl: NativeStyle.Slider.Groove | NativeStyle.Slider.Handle
+ // We normally cannot use a nine patch image for the
+ // groove if we draw tickmarks (since then the scaling
+ // would scale the tickmarks too). The groove might
+ // also use a different background color before, and
+ // after, the handle.
+ useNinePatchImage: false
+ }
+
+ handle: NativeStyle.Slider {
+ // The handle is hidden, since it will be drawn as a part
+ // of the background. But will still needs it to be here so
+ // that we can place the focus rect correctly.
+ visible: false
+
+ control: control
+ subControl: NativeStyle.Slider.Handle
+ x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
+ useNinePatchImage: false
+ }
+}
diff --git a/src/quickcontrols/macos/SpinBox.qml b/src/quickcontrols/macos/SpinBox.qml
new file mode 100644
index 0000000000..9f10a08e55
--- /dev/null
+++ b/src/quickcontrols/macos/SpinBox.qml
@@ -0,0 +1,66 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.NativeStyle as NativeStyle
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitContentWidth + leftInset + rightInset)
+ implicitHeight: Math.max(implicitContentHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight)
+ + topInset + bottomInset
+
+ spacing: 2
+ rightPadding: up.implicitIndicatorWidth + spacing
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextField {
+ text: control.displayText
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignLeft
+ verticalAlignment: Qt.AlignVCenter
+ implicitWidth: 100 // From IB XCode
+
+ topPadding: 2
+ bottomPadding: 2
+ leftPadding: 10
+ rightPadding: 10
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ }
+
+ NativeStyle.SpinBox {
+ id: upAndDown
+ control: control
+ subControl: NativeStyle.SpinBox.Up
+ x: up.indicator.x
+ y: up.indicator.y
+ useNinePatchImage: false
+ }
+
+ up.indicator: Item {
+ x: parent.width - width
+ y: (parent.height / 2) - height
+ implicitWidth: upAndDown.width
+ implicitHeight: upAndDown.height / 2
+ }
+
+ down.indicator: Item {
+ x: parent.width - width
+ y: up.indicator.y + upAndDown.height / 2
+ implicitWidth: upAndDown.width
+ implicitHeight: upAndDown.height / 2
+ }
+}
diff --git a/src/quickcontrols/macos/TextArea.qml b/src/quickcontrols/macos/TextArea.qml
new file mode 100644
index 0000000000..9dbd0863bd
--- /dev/null
+++ b/src/quickcontrols/macos/TextArea.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultTextArea {
+}
diff --git a/src/quickcontrols/macos/TextField.qml b/src/quickcontrols/macos/TextField.qml
new file mode 100644
index 0000000000..2ef2c683da
--- /dev/null
+++ b/src/quickcontrols/macos/TextField.qml
@@ -0,0 +1,11 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultTextField {
+ id: control
+ readonly property Item __focusFrameTarget: control
+ font.pixelSize: background.styleFont(control).pixelSize
+}
diff --git a/src/quickcontrols/macos/TreeViewDelegate.qml b/src/quickcontrols/macos/TreeViewDelegate.qml
new file mode 100644
index 0000000000..43930cc7a9
--- /dev/null
+++ b/src/quickcontrols/macos/TreeViewDelegate.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultTreeViewDelegate {
+ id: control
+
+ palette.highlight: "#2f64e1"
+ palette.highlightedText: "white"
+
+ background: Rectangle {
+ color: control.highlighted ? control.palette.highlight
+ : (control.treeView.alternatingRows && control.row % 2 !== 0
+ ? control.palette.alternateBase : control.palette.base)
+ // Ideally we want a rounded background for the whole row, also when
+ // there are more than one column. But until Rectangle gains support
+ // for corners with individual radii, we simplify it (QTBUG-48774)
+ radius: control.row === control.treeView.currentRow && control.treeView.columns === 1 ? 5 : 0
+ }
+}
+
diff --git a/src/quickcontrols/macos/qtquickcontrols2macosstyleplugin.cpp b/src/quickcontrols/macos/qtquickcontrols2macosstyleplugin.cpp
new file mode 100644
index 0000000000..ec67ffa4dc
--- /dev/null
+++ b/src/quickcontrols/macos/qtquickcontrols2macosstyleplugin.cpp
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_macOS();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_macOS);
+
+class QtQuickControls2MacOSStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2MacOSStylePlugin(QObject *parent = nullptr);
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+};
+
+
+QtQuickControls2MacOSStylePlugin::QtQuickControls2MacOSStylePlugin(QObject *parent):
+ QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_macOS;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2MacOSStylePlugin::name() const
+{
+ return QStringLiteral("macOS");
+}
+
+void QtQuickControls2MacOSStylePlugin::initializeTheme(QQuickTheme */*theme*/)
+{
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2macosstyleplugin.moc"
diff --git a/src/quickcontrols/material/ApplicationWindow.qml b/src/quickcontrols/material/ApplicationWindow.qml
new file mode 100644
index 0000000000..9ba951956b
--- /dev/null
+++ b/src/quickcontrols/material/ApplicationWindow.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.ApplicationWindow {
+ id: window
+
+ color: Material.backgroundColor
+}
diff --git a/src/quickcontrols/material/BusyIndicator.qml b/src/quickcontrols/material/BusyIndicator.qml
new file mode 100644
index 0000000000..9de6535651
--- /dev/null
+++ b/src/quickcontrols/material/BusyIndicator.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.BusyIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ contentItem: BusyIndicatorImpl {
+ implicitWidth: control.Material.touchTarget
+ implicitHeight: control.Material.touchTarget
+ color: control.Material.accentColor
+
+ running: control.running
+ opacity: control.running ? 1 : 0
+ Behavior on opacity { OpacityAnimator { duration: 250 } }
+ }
+}
diff --git a/src/quickcontrols/material/Button.qml b/src/quickcontrols/material/Button.qml
new file mode 100644
index 0000000000..f2828b1eeb
--- /dev/null
+++ b/src/quickcontrols/material/Button.qml
@@ -0,0 +1,85 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topInset: 6
+ bottomInset: 6
+ padding: 12
+ horizontalPadding: padding - 4
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: !enabled ? Material.hintTextColor :
+ flat && highlighted ? Material.accentColor :
+ highlighted ? Material.primaryHighlightedTextColor : Material.foreground
+
+ Material.elevation: flat ? control.down || (enabled && control.hovered) ? 2 : 0
+ : control.down ? 8 : 2
+ Material.background: flat ? "transparent" : undefined
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor :
+ control.flat && control.highlighted ? control.Material.accentColor :
+ control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground
+ }
+
+ background: Rectangle {
+ implicitWidth: 64
+ implicitHeight: control.Material.buttonHeight
+
+ radius: 2
+ color: !control.enabled ? control.Material.buttonDisabledColor :
+ control.highlighted ? (control.checked ? control.Material.highlightedCheckedButtonColor :
+ control.Material.highlightedButtonColor) : control.Material.buttonColor
+
+ PaddedRectangle {
+ y: parent.height - 4
+ width: parent.width
+ height: 4
+ radius: 2
+ topPadding: -2
+ clip: true
+ visible: control.checkable && (!control.highlighted || control.flat)
+ color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor
+ }
+
+ // The layer is disabled when the button color is transparent so you can do
+ // Material.background: "transparent" and get a proper flat button without needing
+ // to set Material.elevation as well
+ layer.enabled: control.enabled && control.Material.buttonColor.a > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+
+ Ripple {
+ clipRadius: 2
+ width: parent.width
+ height: parent.height
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.flat && control.highlighted ? control.Material.highlightedRippleColor : control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/CMakeLists.txt b/src/quickcontrols/material/CMakeLists.txt
new file mode 100644
index 0000000000..f328e775c3
--- /dev/null
+++ b/src/quickcontrols/material/CMakeLists.txt
@@ -0,0 +1,158 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2materialstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "ApplicationWindow.qml"
+ "BusyIndicator.qml"
+ "Button.qml"
+ "CheckBox.qml"
+ "CheckDelegate.qml"
+ "ComboBox.qml"
+ "DelayButton.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+ "Drawer.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "HorizontalHeaderView.qml"
+ "ItemDelegate.qml"
+ "Label.qml"
+ "Menu.qml"
+ "MenuBar.qml"
+ "MenuBarItem.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+ "Page.qml"
+ "PageIndicator.qml"
+ "Pane.qml"
+ "Popup.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "RadioDelegate.qml"
+ "RangeSlider.qml"
+ "RoundButton.qml"
+ "ScrollView.qml"
+ "ScrollBar.qml"
+ "ScrollIndicator.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "SplitView.qml"
+ "StackView.qml"
+ "SwipeDelegate.qml"
+ "SwipeView.qml"
+ "Switch.qml"
+ "SwitchDelegate.qml"
+ "TabBar.qml"
+ "TabButton.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ToolBar.qml"
+ "ToolButton.qml"
+ "ToolSeparator.qml"
+ "ToolTip.qml"
+ "TreeViewDelegate.qml"
+ "Tumbler.qml"
+ "VerticalHeaderView.qml"
+)
+set_source_files_properties(DelayButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(Dialog.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(DialogButtonBox.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(HorizontalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+set_source_files_properties(MenuBar.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuBarItem.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(RoundButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(SplitView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.13;6.0"
+)
+set_source_files_properties(ToolSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(VerticalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2materialstyleplugin
+ URI "QtQuick.Controls.Material"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2MaterialStylePlugin
+ DEPENDENCIES
+ QtQuick/auto
+ IMPORTS
+ QtQuick.Controls.Basic/auto
+ PLUGIN_TARGET qtquickcontrols2materialstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickmaterialstyle.cpp qquickmaterialstyle_p.h
+ qquickmaterialtheme.cpp qquickmaterialtheme_p.h
+ qtquickcontrols2materialstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+qt_internal_add_resource(qtquickcontrols2materialstyleplugin "qtquickcontrols2materialstyleplugin"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/Material"
+ FILES
+ "images/arrow-indicator.png"
+ "images/arrow-indicator@2x.png"
+ "images/arrow-indicator@3x.png"
+ "images/arrow-indicator@4x.png"
+ "images/check.png"
+ "images/check@2x.png"
+ "images/check@3x.png"
+ "images/check@4x.png"
+ "images/drop-indicator.png"
+ "images/drop-indicator@2x.png"
+ "images/drop-indicator@3x.png"
+ "images/drop-indicator@4x.png"
+ "shaders/+glslcore/RectangularGlow.frag"
+ "shaders/+hlsl/RectangularGlow.frag"
+ "shaders/+qsb/RectangularGlow.frag"
+ "shaders/RectangularGlow.frag"
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2materialstyleplugin quickwindow)
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2materialstyleplugin
+ qtquickcontrols2materialstyleimplplugin)
+
+# Basic style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2materialstyleplugin
+ qtquickcontrols2basicstyleplugin)
diff --git a/src/quickcontrols/material/CheckBox.qml b/src/quickcontrols/material/CheckBox.qml
new file mode 100644
index 0000000000..b74fb005fb
--- /dev/null
+++ b/src/quickcontrols/material/CheckBox.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 8
+ padding: 8
+ verticalPadding: padding + 7
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+
+ Ripple {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 28; height: 28
+
+ z: -1
+ anchor: control
+ pressed: control.pressed
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/material/CheckDelegate.qml b/src/quickcontrols/material/CheckDelegate.qml
new file mode 100644
index 0000000000..0dead045a3
--- /dev/null
+++ b/src/quickcontrols/material/CheckDelegate.qml
@@ -0,0 +1,64 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.CheckDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 8
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/ComboBox.qml b/src/quickcontrols/material/ComboBox.qml
new file mode 100644
index 0000000000..30222c4180
--- /dev/null
+++ b/src/quickcontrols/material/ComboBox.qml
@@ -0,0 +1,145 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.ComboBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ topInset: 6
+ bottomInset: 6
+
+ leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+ rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+
+ Material.elevation: flat ? control.pressed || (enabled && control.hovered) ? 2 : 0
+ : control.pressed ? 8 : 2
+ Material.background: flat ? "transparent" : undefined
+ Material.foreground: flat ? undefined : Material.primaryTextColor
+
+ delegate: MenuItem {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ Material.foreground: control.currentIndex === index ? ListView.view.contentItem.Material.accent : ListView.view.contentItem.Material.foreground
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/drop-indicator.png"
+ }
+
+ contentItem: T.TextField {
+ padding: 6
+ leftPadding: control.editable ? 2 : control.mirrored ? 0 : 12
+ rightPadding: control.editable ? 2 : control.mirrored ? 12 : 0
+
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ selectionColor: control.Material.accentColor
+ selectedTextColor: control.Material.primaryHighlightedTextColor
+ verticalAlignment: Text.AlignVCenter
+
+ cursorDelegate: CursorDelegate { }
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: control.Material.buttonHeight
+
+ radius: control.flat ? 0 : 2
+ color: !control.editable ? control.Material.dialogColor : "transparent"
+
+ layer.enabled: control.enabled && !control.editable && control.Material.background.a > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+
+ Rectangle {
+ visible: control.editable
+ y: parent.y + control.baselineOffset
+ width: parent.width
+ height: control.activeFocus ? 2 : 1
+ color: control.editable && control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor
+ }
+
+ Ripple {
+ clip: control.flat
+ clipRadius: control.flat ? 0 : 2
+ x: control.editable && control.indicator ? control.indicator.x : 0
+ width: control.editable && control.indicator ? control.indicator.width : parent.width
+ height: parent.height
+ pressed: control.pressed
+ anchor: control.editable && control.indicator ? control.indicator : control
+ active: enabled && (control.pressed || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+
+ popup: T.Popup {
+ y: control.editable ? control.height - 5 : 0
+ width: control.width
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
+ transformOrigin: Item.Top
+ topMargin: 12
+ bottomMargin: 12
+
+ Material.theme: control.Material.theme
+ Material.accent: control.Material.accent
+ Material.primary: control.Material.primary
+
+ enter: Transition {
+ // grow_fade_in
+ NumberAnimation { property: "scale"; from: 0.9; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ // shrink_fade_out
+ NumberAnimation { property: "scale"; to: 0.9; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ radius: 2
+ color: parent.Material.dialogColor
+
+ layer.enabled: control.enabled
+ layer.effect: ElevationEffect {
+ elevation: 8
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/material/DelayButton.qml b/src/quickcontrols/material/DelayButton.qml
new file mode 100644
index 0000000000..f050d57a39
--- /dev/null
+++ b/src/quickcontrols/material/DelayButton.qml
@@ -0,0 +1,83 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.DelayButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topInset: 6
+ bottomInset: 6
+ padding: 12
+ horizontalPadding: padding - 4
+
+ Material.elevation: control.down ? 8 : 2
+
+ transition: Transition {
+ NumberAnimation {
+ duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor : control.Material.foreground
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state
+ background: Rectangle {
+ implicitWidth: 64
+ implicitHeight: control.Material.buttonHeight
+
+ radius: 2
+ color: !control.enabled ? control.Material.buttonDisabledColor : control.Material.buttonColor
+
+ PaddedRectangle {
+ y: parent.height - 4
+ width: parent.width
+ height: 4
+ radius: 2
+ topPadding: -2
+ clip: true
+ color: control.checked && control.enabled ? control.Material.accentColor : control.Material.secondaryTextColor
+
+ PaddedRectangle {
+ width: parent.width * control.progress
+ height: 4
+ radius: 2
+ topPadding: -2
+ rightPadding: Math.max(-2, width - parent.width)
+ clip: true
+ color: control.Material.accentColor
+ }
+ }
+
+ layer.enabled: control.enabled && control.Material.buttonColor.a > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+
+ Ripple {
+ clipRadius: 2
+ width: parent.width
+ height: parent.height
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/Dial.qml b/src/quickcontrols/material/Dial.qml
new file mode 100644
index 0000000000..a44938fe20
--- /dev/null
+++ b/src/quickcontrols/material/Dial.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 100
+
+ x: control.width / 2 - width / 2
+ y: control.height / 2 - height / 2
+ width: Math.max(64, Math.min(control.width, control.height))
+ height: width
+ color: "transparent"
+ radius: width / 2
+
+ border.color: control.enabled ? control.Material.accentColor : control.Material.hintTextColor
+ }
+
+ handle: SliderHandle {
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+ transform: [
+ Translate {
+ y: -control.background.height * 0.4 + control.handle.height / 2
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: control.handle.width / 2
+ origin.y: control.handle.height / 2
+ }
+ ]
+ implicitWidth: 10
+ implicitHeight: 10
+
+ value: control.value
+ handleHasFocus: control.visualFocus
+ handlePressed: control.pressed
+ handleHovered: control.hovered
+ }
+}
diff --git a/src/quickcontrols/material/Dialog.qml b/src/quickcontrols/material/Dialog.qml
new file mode 100644
index 0000000000..72f11ffd22
--- /dev/null
+++ b/src/quickcontrols/material/Dialog.qml
@@ -0,0 +1,79 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ padding: 24
+ topPadding: 20
+
+ Material.elevation: 24
+
+ enter: Transition {
+ // grow_fade_in
+ NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ // shrink_fade_out
+ NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ background: Rectangle {
+ radius: 2
+ color: control.Material.dialogColor
+
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ padding: 24
+ bottomPadding: 0
+ // TODO: QPlatformTheme::TitleBarFont
+ font.bold: true
+ font.pixelSize: 16
+ background: PaddedRectangle {
+ radius: 2
+ color: control.Material.dialogColor
+ bottomPadding: -2
+ clip: true
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/material/DialogButtonBox.qml b/src/quickcontrols/material/DialogButtonBox.qml
new file mode 100644
index 0000000000..dad1601931
--- /dev/null
+++ b/src/quickcontrols/material/DialogButtonBox.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 8
+ padding: 8
+ verticalPadding: 2
+ alignment: Qt.AlignRight
+ buttonLayout: T.DialogButtonBox.AndroidLayout
+
+ Material.foreground: Material.accent
+
+ delegate: Button { flat: true }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: PaddedRectangle {
+ implicitHeight: control.Material.dialogButtonBoxHeight
+ radius: 2
+ color: control.Material.dialogColor
+ // Rounded corners should be only at the top or at the bottom
+ topPadding: control.position === T.DialogButtonBox.Footer ? -2 : 0
+ bottomPadding: control.position === T.DialogButtonBox.Header ? -2 : 0
+ clip: true
+ }
+}
diff --git a/src/quickcontrols/material/Drawer.qml b/src/quickcontrols/material/Drawer.qml
new file mode 100644
index 0000000000..ecfe8836b9
--- /dev/null
+++ b/src/quickcontrols/material/Drawer.qml
@@ -0,0 +1,58 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: !dim && edge === Qt.BottomEdge && Material.elevation === 0
+ leftPadding: !dim && edge === Qt.RightEdge && Material.elevation === 0
+ rightPadding: !dim && edge === Qt.LeftEdge && Material.elevation === 0
+ bottomPadding: !dim && edge === Qt.TopEdge && Material.elevation === 0
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ Material.elevation: !interactive && !dim ? 0 : 16
+
+ background: Rectangle {
+ color: control.Material.dialogColor
+
+ Rectangle {
+ readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
+ width: horizontal ? 1 : parent.width
+ height: horizontal ? parent.height : 1
+ color: control.Material.dividerColor
+ x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0
+ y: control.edge === Qt.TopEdge ? parent.height - 1 : 0
+ visible: !control.dim && control.Material.elevation === 0
+ }
+
+ layer.enabled: control.position > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ fullHeight: true
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/material/Frame.qml b/src/quickcontrols/material/Frame.qml
new file mode 100644
index 0000000000..8b6674e16f
--- /dev/null
+++ b/src/quickcontrols/material/Frame.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+ verticalPadding: Material.frameVerticalPadding
+
+ background: Rectangle {
+ radius: 2
+ color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent"
+ border.color: control.Material.frameColor
+
+ layer.enabled: control.enabled && control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+}
diff --git a/src/quickcontrols/material/GroupBox.qml b/src/quickcontrols/material/GroupBox.qml
new file mode 100644
index 0000000000..be7e6fbadc
--- /dev/null
+++ b/src/quickcontrols/material/GroupBox.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 6
+ padding: 12
+ topPadding: Material.frameVerticalPadding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+ bottomPadding: Material.frameVerticalPadding
+
+ label: Text {
+ x: control.leftPadding
+ width: control.availableWidth
+
+ text: control.title
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+
+ radius: 2
+ color: control.Material.elevation > 0 ? control.Material.backgroundColor : "transparent"
+ border.color: control.Material.frameColor
+
+ layer.enabled: control.enabled && control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+}
diff --git a/src/quickcontrols/material/HorizontalHeaderView.qml b/src/quickcontrols/material/HorizontalHeaderView.qml
new file mode 100644
index 0000000000..671728c004
--- /dev/null
+++ b/src/quickcontrols/material/HorizontalHeaderView.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.HorizontalHeaderView {
+ id: control
+
+ implicitWidth: syncView ? syncView.width : 0
+ implicitHeight: contentHeight
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: text.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
+ color: control.Material.backgroundColor
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/ItemDelegate.qml b/src/quickcontrols/material/ItemDelegate.qml
new file mode 100644
index 0000000000..f394106d3b
--- /dev/null
+++ b/src/quickcontrols/material/ItemDelegate.qml
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 8
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/LICENSE_ANGULARJS.txt b/src/quickcontrols/material/LICENSE_ANGULARJS.txt
new file mode 100644
index 0000000000..c1f2a826bb
--- /dev/null
+++ b/src/quickcontrols/material/LICENSE_ANGULARJS.txt
@@ -0,0 +1,19 @@
+Copyright (c) 2014-2016 Google, Inc. http://angularjs.org
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/src/quickcontrols/material/Label.qml b/src/quickcontrols/material/Label.qml
new file mode 100644
index 0000000000..ce4e01a058
--- /dev/null
+++ b/src/quickcontrols/material/Label.qml
@@ -0,0 +1,13 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.Label {
+ id: control
+
+ color: enabled ? Material.foreground : Material.hintTextColor
+ linkColor: Material.accentColor
+}
diff --git a/src/quickcontrols/material/Menu.qml b/src/quickcontrols/material/Menu.qml
new file mode 100644
index 0000000000..4601772196
--- /dev/null
+++ b/src/quickcontrols/material/Menu.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+import QtQuick.Window
+
+T.Menu {
+ id: control
+
+ Material.elevation: 8
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 0
+ verticalPadding: 8
+
+ transformOrigin: !cascade ? Item.Top : (mirrored ? Item.TopRight : Item.TopLeft)
+
+ delegate: MenuItem { }
+
+ enter: Transition {
+ // grow_fade_in
+ NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ // shrink_fade_out
+ NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: control.Material.menuItemHeight
+
+ radius: 3
+ color: control.Material.dialogColor
+
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/material/MenuBar.qml b/src/quickcontrols/material/MenuBar.qml
new file mode 100644
index 0000000000..c31b5b3158
--- /dev/null
+++ b/src/quickcontrols/material/MenuBar.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.MenuBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuBarItem { }
+
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.contentModel
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: control.Material.dialogColor
+ }
+}
diff --git a/src/quickcontrols/material/MenuBarItem.qml b/src/quickcontrols/material/MenuBarItem.qml
new file mode 100644
index 0000000000..1ef47659f4
--- /dev/null
+++ b/src/quickcontrols/material/MenuBarItem.qml
@@ -0,0 +1,55 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.MenuBarItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 12
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: control.down || control.highlighted
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/MenuItem.qml b/src/quickcontrols/material/MenuItem.qml
new file mode 100644
index 0000000000..34e88a1e0b
--- /dev/null
+++ b/src/quickcontrols/material/MenuItem.qml
@@ -0,0 +1,78 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: Material.menuItemVerticalPadding
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ visible: control.checkable
+ control: control
+ checkState: control.checked ? Qt.Checked : Qt.Unchecked
+ }
+
+ arrow: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.subMenu
+ mirror: control.mirrored
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png"
+ }
+
+ contentItem: IconLabel {
+ readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
+ readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
+ rightPadding: control.mirrored ? indicatorPadding : arrowPadding
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: control.Material.menuItemHeight
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: control.down || control.highlighted
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/MenuSeparator.qml b/src/quickcontrols/material/MenuSeparator.qml
new file mode 100644
index 0000000000..c0c9fb34ec
--- /dev/null
+++ b/src/quickcontrols/material/MenuSeparator.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ verticalPadding: 8
+
+ contentItem: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 1
+ color: control.Material.dividerColor
+ }
+}
diff --git a/src/quickcontrols/material/Page.qml b/src/quickcontrols/material/Page.qml
new file mode 100644
index 0000000000..f8b97a2d3e
--- /dev/null
+++ b/src/quickcontrols/material/Page.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.Page {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ background: Rectangle {
+ color: control.Material.backgroundColor
+ }
+}
diff --git a/src/quickcontrols/material/PageIndicator.qml b/src/quickcontrols/material/PageIndicator.qml
new file mode 100644
index 0000000000..a64ab67b53
--- /dev/null
+++ b/src/quickcontrols/material/PageIndicator.qml
@@ -0,0 +1,44 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ delegate: Rectangle {
+ implicitWidth: 8
+ implicitHeight: 8
+
+ radius: width / 2
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+
+ // qmllint disable unqualified
+ // We can't make "pressed" a required property, as QQuickPageIndicator doesn't create
+ // the delegates, and so it can't set it as an initial property.
+ opacity: index === control.currentIndex ? 0.95 : pressed ? 0.7 : 0.45
+
+ required property int index
+
+ Behavior on opacity { OpacityAnimator { duration: 100 } }
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/src/quickcontrols/material/Pane.qml b/src/quickcontrols/material/Pane.qml
new file mode 100644
index 0000000000..a6e0ae5b33
--- /dev/null
+++ b/src/quickcontrols/material/Pane.qml
@@ -0,0 +1,28 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Pane {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.Material.backgroundColor
+ radius: control.Material.elevation > 0 ? 2 : 0
+
+ layer.enabled: control.enabled && control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+}
diff --git a/src/quickcontrols/material/Popup.qml b/src/quickcontrols/material/Popup.qml
new file mode 100644
index 0000000000..7727ef0d3c
--- /dev/null
+++ b/src/quickcontrols/material/Popup.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Popup {
+ id: control
+
+ Material.elevation: 24
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ enter: Transition {
+ // grow_fade_in
+ NumberAnimation { property: "scale"; from: 0.9; to: 1.0; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ exit: Transition {
+ // shrink_fade_out
+ NumberAnimation { property: "scale"; from: 1.0; to: 0.9; easing.type: Easing.OutQuint; duration: 220 }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.OutCubic; duration: 150 }
+ }
+
+ background: Rectangle {
+ radius: 2
+ color: control.Material.dialogColor
+
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Material.backgroundDimColor
+ Behavior on opacity { NumberAnimation { duration: 150 } }
+ }
+}
diff --git a/src/quickcontrols/material/ProgressBar.qml b/src/quickcontrols/material/ProgressBar.qml
new file mode 100644
index 0000000000..073088bdd2
--- /dev/null
+++ b/src/quickcontrols/material/ProgressBar.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: ProgressBarImpl {
+ implicitHeight: 4
+
+ scale: control.mirrored ? -1 : 1
+ color: control.Material.accentColor
+ progress: control.position
+ indeterminate: control.visible && control.indeterminate
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 4
+ y: (control.height - height) / 2
+ height: 4
+
+ color: Qt.rgba(control.Material.accentColor.r, control.Material.accentColor.g, control.Material.accentColor.b, 0.25)
+ }
+}
diff --git a/src/quickcontrols/material/RadioButton.qml b/src/quickcontrols/material/RadioButton.qml
new file mode 100644
index 0000000000..00c9390095
--- /dev/null
+++ b/src/quickcontrols/material/RadioButton.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 8
+ padding: 8
+ verticalPadding: padding + 6
+
+ indicator: RadioIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+
+ Ripple {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 28; height: 28
+
+ z: -1
+ anchor: control
+ pressed: control.pressed
+ active: control.down || control.visualFocus || control.hovered
+ color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/material/RadioDelegate.qml b/src/quickcontrols/material/RadioDelegate.qml
new file mode 100644
index 0000000000..ad9f95443f
--- /dev/null
+++ b/src/quickcontrols/material/RadioDelegate.qml
@@ -0,0 +1,64 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 8
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ indicator: RadioIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: control.down || control.visualFocus || control.hovered
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/RangeSlider.qml b/src/quickcontrols/material/RangeSlider.qml
new file mode 100644
index 0000000000..81507f334d
--- /dev/null
+++ b/src/quickcontrols/material/RangeSlider.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ first.implicitHandleWidth + leftPadding + rightPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ first.implicitHandleHeight + topPadding + bottomPadding,
+ second.implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ first.handle: SliderHandle {
+ x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
+ value: control.first.value
+ handleHasFocus: activeFocus
+ handlePressed: control.first.pressed
+ handleHovered: control.first.hovered
+ }
+
+ second.handle: SliderHandle {
+ x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
+ value: control.second.value
+ handleHasFocus: activeFocus
+ handlePressed: control.second.pressed
+ handleHovered: control.second.hovered
+ }
+
+ background: Rectangle {
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ implicitWidth: control.horizontal ? 200 : 48
+ implicitHeight: control.horizontal ? 48 : 200
+ width: control.horizontal ? control.availableWidth : 4
+ height: control.horizontal ? 4 : control.availableHeight
+ scale: control.horizontal && control.mirrored ? -1 : 1
+ color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor
+
+ Rectangle {
+ x: control.horizontal ? control.first.position * parent.width : 0
+ y: control.horizontal ? 0 : control.second.visualPosition * parent.height
+ width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 4
+ height: control.horizontal ? 4 : control.second.position * parent.height - control.first.position * parent.height
+
+ color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/RoundButton.qml b/src/quickcontrols/material/RoundButton.qml
new file mode 100644
index 0000000000..3484fb9460
--- /dev/null
+++ b/src/quickcontrols/material/RoundButton.qml
@@ -0,0 +1,81 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.RoundButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ topInset: 6
+ leftInset: 6
+ rightInset: 6
+ bottomInset: 6
+ padding: 12
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: !enabled ? Material.hintTextColor :
+ flat && highlighted ? Material.accentColor :
+ highlighted ? Material.primaryHighlightedTextColor : Material.foreground
+
+ Material.elevation: flat ? control.down || control.hovered ? 2 : 0
+ : control.down ? 12 : 6
+ Material.background: flat ? "transparent" : undefined
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor :
+ control.flat && control.highlighted ? control.Material.accentColor :
+ control.highlighted ? control.Material.primaryHighlightedTextColor : control.Material.foreground
+ }
+
+ // TODO: Add a proper ripple/ink effect for mouse/touch input and focus state
+ background: Rectangle {
+ implicitWidth: control.Material.buttonHeight
+ implicitHeight: control.Material.buttonHeight
+
+ radius: control.radius
+ color: !control.enabled ? control.Material.buttonDisabledColor
+ : control.checked || control.highlighted ? control.Material.highlightedButtonColor : control.Material.buttonColor
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: control.radius
+ visible: enabled && (control.hovered || control.visualFocus)
+ color: control.Material.rippleColor
+ }
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: control.radius
+ visible: control.down
+ color: control.Material.rippleColor
+ }
+
+ // The layer is disabled when the button color is transparent so that you can do
+ // Material.background: "transparent" and get a proper flat button without needing
+ // to set Material.elevation as well
+ layer.enabled: control.enabled && control.Material.buttonColor.a > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ }
+ }
+}
diff --git a/src/quickcontrols/material/ScrollBar.qml b/src/quickcontrols/material/ScrollBar.qml
new file mode 100644
index 0000000000..b377f4042a
--- /dev/null
+++ b/src/quickcontrols/material/ScrollBar.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: control.interactive ? 1 : 2
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ contentItem: Rectangle {
+ implicitWidth: control.interactive ? 13 : 4
+ implicitHeight: control.interactive ? 13 : 4
+
+ color: control.pressed ? control.Material.scrollBarPressedColor :
+ control.interactive && control.hovered ? control.Material.scrollBarHoveredColor : control.Material.scrollBarColor
+ opacity: 0.0
+ }
+
+ background: Rectangle {
+ implicitWidth: control.interactive ? 16 : 4
+ implicitHeight: control.interactive ? 16 : 4
+ color: "#0e000000"
+ opacity: 0.0
+ visible: control.interactive
+ }
+
+ states: State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ }
+
+ transitions: [
+ Transition {
+ to: "active"
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 }
+ },
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 }
+ PauseAnimation { duration: 2450 }
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+}
diff --git a/src/quickcontrols/material/ScrollIndicator.qml b/src/quickcontrols/material/ScrollIndicator.qml
new file mode 100644
index 0000000000..71f7eea104
--- /dev/null
+++ b/src/quickcontrols/material/ScrollIndicator.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+
+ contentItem: Rectangle {
+ implicitWidth: 4
+ implicitHeight: 4
+
+ color: control.Material.scrollBarColor
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.active
+ PropertyChanges { control.contentItem.opacity: 0.75 }
+ }
+
+ transitions: [
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/material/ScrollView.qml b/src/quickcontrols/material/ScrollView.qml
new file mode 100644
index 0000000000..60789313c9
--- /dev/null
+++ b/src/quickcontrols/material/ScrollView.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/material/SelectionRectangle.qml b/src/quickcontrols/material/SelectionRectangle.qml
new file mode 100644
index 0000000000..4e1b425f47
--- /dev/null
+++ b/src/quickcontrols/material/SelectionRectangle.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: handle
+ bottomRightHandle: handle
+
+ Component {
+ id: handle
+ SliderHandle {
+ palette: SelectionRectangle.control.palette
+ handlePressed: tapHandler.pressed || SelectionRectangle.dragging
+ handleHovered: hoverHandler.hovered
+ visible: SelectionRectangle.control.active
+
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ TapHandler {
+ id: tapHandler
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/material/Slider.qml b/src/quickcontrols/material/Slider.qml
new file mode 100644
index 0000000000..5061ecf03f
--- /dev/null
+++ b/src/quickcontrols/material/Slider.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ handle: SliderHandle {
+ x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
+ value: control.value
+ handleHasFocus: control.visualFocus
+ handlePressed: control.pressed
+ handleHovered: control.hovered
+ }
+
+ background: Rectangle {
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ implicitWidth: control.horizontal ? 200 : 48
+ implicitHeight: control.horizontal ? 48 : 200
+ width: control.horizontal ? control.availableWidth : 4
+ height: control.horizontal ? 4 : control.availableHeight
+ scale: control.horizontal && control.mirrored ? -1 : 1
+ color: control.enabled ? Color.transparent(control.Material.accentColor, 0.33) : control.Material.sliderDisabledColor
+
+ Rectangle {
+ x: control.horizontal ? 0 : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height
+ width: control.horizontal ? control.position * parent.width : 4
+ height: control.horizontal ? 4 : control.position * parent.height
+
+ color: control.enabled ? control.Material.accentColor : control.Material.sliderDisabledColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/SpinBox.qml b/src/quickcontrols/material/SpinBox.qml
new file mode 100644
index 0000000000..7529f8e9a0
--- /dev/null
+++ b/src/quickcontrols/material/SpinBox.qml
@@ -0,0 +1,123 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth +
+ up.implicitIndicatorWidth +
+ down.implicitIndicatorWidth)
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight,
+ down.implicitIndicatorHeight)
+
+ spacing: 6
+ topPadding: 8
+ bottomPadding: 16
+ leftPadding: (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
+ rightPadding: (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ text: control.displayText
+
+ font: control.font
+ color: enabled ? control.Material.foreground : control.Material.hintTextColor
+ selectionColor: control.Material.textSelectionColor
+ selectedTextColor: control.Material.foreground
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: Qt.AlignVCenter
+
+ cursorDelegate: CursorDelegate { }
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ }
+
+ up.indicator: Item {
+ x: control.mirrored ? 0 : control.width - width
+ implicitWidth: control.Material.touchTarget
+ implicitHeight: control.Material.touchTarget
+ height: control.height
+ width: height
+
+ Ripple {
+ clipRadius: 2
+ x: control.spacing
+ y: control.spacing
+ width: parent.width - 2 * control.spacing
+ height: parent.height - 2 * control.spacing
+ pressed: control.up.pressed
+ active: control.up.pressed || control.up.hovered || control.visualFocus
+ color: control.Material.rippleColor
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: Math.min(parent.width / 3, parent.height / 3)
+ height: 2
+ color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor
+ }
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 2
+ height: Math.min(parent.width / 3, parent.height / 3)
+ color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor
+ }
+ }
+
+ down.indicator: Item {
+ x: control.mirrored ? control.width - width : 0
+ implicitWidth: control.Material.touchTarget
+ implicitHeight: control.Material.touchTarget
+ height: control.height
+ width: height
+
+ Ripple {
+ clipRadius: 2
+ x: control.spacing
+ y: control.spacing
+ width: parent.width - 2 * control.spacing
+ height: parent.height - 2 * control.spacing
+ pressed: control.down.pressed
+ active: control.down.pressed || control.down.hovered || control.visualFocus
+ color: control.Material.rippleColor
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 3
+ height: 2
+ color: enabled ? control.Material.foreground : control.Material.spinBoxDisabledIconColor
+ }
+ }
+
+ background: Item {
+ implicitWidth: 192
+ implicitHeight: control.Material.touchTarget
+
+ Rectangle {
+ x: parent.width / 2 - width / 2
+ y: parent.y + parent.height - height - control.bottomPadding / 2
+ width: control.availableWidth
+ height: control.activeFocus ? 2 : 1
+ color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/SplitView.qml b/src/quickcontrols/material/SplitView.qml
new file mode 100644
index 0000000000..0c53a0f557
--- /dev/null
+++ b/src/quickcontrols/material/SplitView.qml
@@ -0,0 +1,40 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+
+T.SplitView {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: Rectangle {
+ implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width
+ implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6
+ color: T.SplitHandle.pressed ? control.Material.background
+ : Qt.lighter(control.Material.background, T.SplitHandle.hovered ? 1.2 : 1.1)
+
+ Rectangle {
+ color: control.Material.secondaryTextColor
+ width: control.orientation === Qt.Horizontal ? thickness : length
+ height: control.orientation === Qt.Horizontal ? length : thickness
+ radius: thickness
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+
+ property int length: parent.T.SplitHandle.pressed ? 3 : 8
+ readonly property int thickness: parent.T.SplitHandle.pressed ? 3 : 1
+
+ Behavior on length {
+ NumberAnimation {
+ duration: 100
+ }
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/material/StackView.qml b/src/quickcontrols/material/StackView.qml
new file mode 100644
index 0000000000..241b91f2d7
--- /dev/null
+++ b/src/quickcontrols/material/StackView.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.StackView {
+ id: control
+
+ popEnter: Transition {
+ // slide_in_left
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * -control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ popExit: Transition {
+ // slide_out_right
+ NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * control.width; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ pushEnter: Transition {
+ // slide_in_right
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ pushExit: Transition {
+ // slide_out_left
+ NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ replaceEnter: Transition {
+ // slide_in_right
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.5 : 0.5) * control.width; to: 0; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+
+ replaceExit: Transition {
+ // slide_out_left
+ NumberAnimation { property: "x"; from: 0; to: (control.mirrored ? -0.5 : 0.5) * -control.width; duration: 200; easing.type: Easing.OutCubic }
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; duration: 200; easing.type: Easing.OutCubic }
+ }
+}
diff --git a/src/quickcontrols/material/SwipeDelegate.qml b/src/quickcontrols/material/SwipeDelegate.qml
new file mode 100644
index 0000000000..d445dafac1
--- /dev/null
+++ b/src/quickcontrols/material/SwipeDelegate.qml
@@ -0,0 +1,65 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: 8
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+
+ color: control.Material.backgroundColor
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.highlighted
+ color: control.Material.listHighlightColor
+ }
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ enabled: control.swipe.position === 0
+ }
+ }
+}
diff --git a/src/quickcontrols/material/SwipeView.qml b/src/quickcontrols/material/SwipeView.qml
new file mode 100644
index 0000000000..72e63dd4d2
--- /dev/null
+++ b/src/quickcontrols/material/SwipeView.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.SwipeView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ contentItem: ListView {
+ model: control.contentModel
+ interactive: control.interactive
+ currentIndex: control.currentIndex
+ focus: control.focus
+
+ spacing: control.spacing
+ orientation: control.orientation
+ snapMode: ListView.SnapOneItem
+ boundsBehavior: Flickable.StopAtBounds
+
+ highlightRangeMode: ListView.StrictlyEnforceRange
+ preferredHighlightBegin: 0
+ preferredHighlightEnd: 0
+ highlightMoveDuration: 250
+ maximumFlickVelocity: 4 * (control.orientation === Qt.Horizontal ? width : height)
+ }
+}
diff --git a/src/quickcontrols/material/Switch.qml b/src/quickcontrols/material/Switch.qml
new file mode 100644
index 0000000000..db3fedfdc3
--- /dev/null
+++ b/src/quickcontrols/material/Switch.qml
@@ -0,0 +1,46 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+import QtQuick.Templates as T
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 8
+ spacing: 8
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+
+ Ripple {
+ x: parent.handle.x + parent.handle.width / 2 - width / 2
+ y: parent.handle.y + parent.handle.height / 2 - height / 2
+ width: 28; height: 28
+ pressed: control.pressed
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.checked ? control.Material.highlightedRippleColor : control.Material.rippleColor
+ }
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+ }
+}
diff --git a/src/quickcontrols/material/SwitchDelegate.qml b/src/quickcontrols/material/SwitchDelegate.qml
new file mode 100644
index 0000000000..39423887f9
--- /dev/null
+++ b/src/quickcontrols/material/SwitchDelegate.qml
@@ -0,0 +1,64 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 16
+ verticalPadding: Material.switchDelegateVerticalPadding
+ spacing: 16
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: enabled ? Material.foreground : Material.hintTextColor
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.delegateHeight
+
+ color: control.highlighted ? control.Material.listHighlightColor : "transparent"
+
+ Ripple {
+ width: parent.width
+ height: parent.height
+
+ clip: visible
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/TabBar.qml b/src/quickcontrols/material/TabBar.qml
new file mode 100644
index 0000000000..5daffc9797
--- /dev/null
+++ b/src/quickcontrols/material/TabBar.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 1
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 250
+ highlightResizeDuration: 0
+ highlightFollowsCurrentItem: true
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 48
+ preferredHighlightEnd: width - 48
+
+ highlight: Item {
+ z: 2
+ Rectangle {
+ height: 2
+ width: parent.width
+ y: control.position === T.TabBar.Footer ? 0 : parent.height - height
+ color: control.Material.accentColor
+ }
+ }
+ }
+
+ background: Rectangle {
+ color: control.Material.backgroundColor
+
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ fullWidth: true
+ }
+ }
+}
diff --git a/src/quickcontrols/material/TabButton.qml b/src/quickcontrols/material/TabButton.qml
new file mode 100644
index 0000000000..a57f652d37
--- /dev/null
+++ b/src/quickcontrols/material/TabButton.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 12
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: !enabled ? Material.hintTextColor : down || checked ? Material.accentColor : Material.foreground
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor : control.down || control.checked ? control.Material.accentColor : control.Material.foreground
+ }
+
+ background: Ripple {
+ implicitHeight: control.Material.touchTarget
+
+ clip: true
+ pressed: control.pressed
+ anchor: control
+ active: enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+}
diff --git a/src/quickcontrols/material/TextArea.qml b/src/quickcontrols/material/TextArea.qml
new file mode 100644
index 0000000000..242cbf691b
--- /dev/null
+++ b/src/quickcontrols/material/TextArea.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + 1 + topPadding + bottomPadding)
+
+ topPadding: 8
+ bottomPadding: 16
+
+ color: enabled ? Material.foreground : Material.hintTextColor
+ selectionColor: Material.accentColor
+ selectedTextColor: Material.primaryHighlightedTextColor
+ placeholderTextColor: Material.hintTextColor
+ cursorDelegate: CursorDelegate { }
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ elide: Text.ElideRight
+ renderType: control.renderType
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ }
+
+ background: Rectangle {
+ y: parent.height - height - control.bottomPadding / 2
+ implicitWidth: 120
+ height: control.activeFocus ? 2 : 1
+ color: control.activeFocus ? control.Material.accentColor : control.Material.hintTextColor
+ }
+}
diff --git a/src/quickcontrols/material/TextField.qml b/src/quickcontrols/material/TextField.qml
new file mode 100644
index 0000000000..598f66f938
--- /dev/null
+++ b/src/quickcontrols/material/TextField.qml
@@ -0,0 +1,52 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ topPadding: 8
+ bottomPadding: 16
+
+ color: enabled ? Material.foreground : Material.hintTextColor
+ selectionColor: Material.accentColor
+ selectedTextColor: Material.primaryHighlightedTextColor
+ placeholderTextColor: Material.hintTextColor
+ verticalAlignment: TextInput.AlignVCenter
+
+ cursorDelegate: CursorDelegate { }
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ verticalAlignment: control.verticalAlignment
+ elide: Text.ElideRight
+ renderType: control.renderType
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ }
+
+ background: Rectangle {
+ y: control.height - height - control.bottomPadding + 8
+ implicitWidth: 120
+ height: control.activeFocus || (enabled && control.hovered) ? 2 : 1
+ color: control.activeFocus ? control.Material.accentColor
+ : ((enabled && control.hovered) ? control.Material.primaryTextColor : control.Material.hintTextColor)
+ }
+}
diff --git a/src/quickcontrols/material/ToolBar.qml b/src/quickcontrols/material/ToolBar.qml
new file mode 100644
index 0000000000..96fa3c6302
--- /dev/null
+++ b/src/quickcontrols/material/ToolBar.qml
@@ -0,0 +1,33 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.ToolBar {
+ id: control
+
+ Material.elevation: 4
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ Material.foreground: Material.toolTextColor
+
+ spacing: 16
+
+ background: Rectangle {
+ implicitHeight: 48
+ color: control.Material.toolBarColor
+
+ layer.enabled: control.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: control.Material.elevation
+ fullWidth: true
+ }
+ }
+}
diff --git a/src/quickcontrols/material/ToolButton.qml b/src/quickcontrols/material/ToolButton.qml
new file mode 100644
index 0000000000..ac397edeea
--- /dev/null
+++ b/src/quickcontrols/material/ToolButton.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 6
+
+ icon.width: 24
+ icon.height: 24
+ icon.color: !enabled ? Material.hintTextColor : checked || highlighted ? Material.accent : Material.foreground
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Material.hintTextColor :
+ control.checked || control.highlighted ? control.Material.accent : control.Material.foreground
+ }
+
+ background: Ripple {
+ implicitWidth: control.Material.touchTarget
+ implicitHeight: control.Material.touchTarget
+
+ readonly property bool square: control.contentItem.width <= control.contentItem.height
+
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ clip: !square
+ width: square ? parent.height / 2 : parent.width
+ height: square ? parent.height / 2 : parent.height
+ pressed: control.pressed
+ anchor: control
+ active: control.enabled && (control.down || control.visualFocus || control.hovered)
+ color: control.Material.rippleColor
+ }
+}
diff --git a/src/quickcontrols/material/ToolSeparator.qml b/src/quickcontrols/material/ToolSeparator.qml
new file mode 100644
index 0000000000..456067ac0e
--- /dev/null
+++ b/src/quickcontrols/material/ToolSeparator.qml
@@ -0,0 +1,24 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.ToolSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ horizontalPadding: vertical ? 12 : 5
+ verticalPadding: vertical ? 5 : 12
+
+ contentItem: Rectangle {
+ implicitWidth: control.vertical ? 1 : 38
+ implicitHeight: control.vertical ? 38 : 1
+ color: control.Material.hintTextColor
+ }
+}
diff --git a/src/quickcontrols/material/ToolTip.qml b/src/quickcontrols/material/ToolTip.qml
new file mode 100644
index 0000000000..b944c23557
--- /dev/null
+++ b/src/quickcontrols/material/ToolTip.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0
+ y: -implicitHeight - 24
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 12
+ padding: 8
+ horizontalPadding: padding + 8
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ Material.theme: Material.Dark
+
+ enter: Transition {
+ // toast_enter
+ NumberAnimation { property: "opacity"; from: 0.0; to: 1.0; easing.type: Easing.OutQuad; duration: 500 }
+ }
+
+ exit: Transition {
+ // toast_exit
+ NumberAnimation { property: "opacity"; from: 1.0; to: 0.0; easing.type: Easing.InQuad; duration: 500 }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ color: control.Material.foreground
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.tooltipHeight
+ color: control.Material.tooltipColor
+ opacity: 0.9
+ radius: 2
+ }
+}
diff --git a/src/quickcontrols/material/TreeViewDelegate.qml b/src/quickcontrols/material/TreeViewDelegate.qml
new file mode 100644
index 0000000000..a7be36a555
--- /dev/null
+++ b/src/quickcontrols/material/TreeViewDelegate.qml
@@ -0,0 +1,62 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Material
+
+T.TreeViewDelegate {
+ id: control
+
+ implicitWidth: leftMargin + __contentIndent + implicitContentWidth + rightPadding + rightMargin
+ implicitHeight: Math.max(implicitBackgroundHeight, implicitContentHeight, implicitIndicatorHeight)
+
+ indentation: indicator ? indicator.width : 12
+ leftMargin: 16
+ rightMargin: 16
+ spacing: 14
+
+ topPadding: contentItem ? (height - contentItem.implicitHeight) / 2 : 0
+ leftPadding: !mirrored ? leftMargin + __contentIndent : width - leftMargin - __contentIndent - implicitContentWidth
+
+ highlighted: control.selected || control.current
+ || ((control.treeView.selectionBehavior === TableView.SelectRows
+ || control.treeView.selectionBehavior === TableView.SelectionDisabled)
+ && control.row === control.treeView.currentRow)
+
+ required property int row
+ required property var model
+ readonly property real __contentIndent: !isTreeNode ? 0 : (depth * indentation) + (indicator ? indicator.width + spacing : 0)
+
+ indicator: Item {
+ readonly property real __indicatorIndent: control.leftMargin + (control.depth * control.indentation)
+ x: !control.mirrored ? __indicatorIndent : control.width - __indicatorIndent - width
+ y: (control.height - height) / 2
+ implicitWidth: Math.max(arrow.implicitWidth, 20)
+ implicitHeight: control.Material.buttonHeight
+
+ property ColorImage arrow : ColorImage {
+ parent: control.indicator
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ rotation: control.expanded ? 90 : (control.mirrored ? 180 : 0)
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/arrow-indicator.png"
+ color: control.palette.windowText
+ defaultColor: "#353637"
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: control.Material.buttonHeight
+ color: control.highlighted
+ ? control.palette.highlight
+ : (control.treeView.alternatingRows && control.row % 2 !== 0
+ ? control.palette.alternateBase : control.palette.base)
+ }
+
+ contentItem: Label {
+ text: control.model.display
+ elide: Text.ElideRight
+ }
+}
diff --git a/src/quickcontrols/material/Tumbler.qml b/src/quickcontrols/material/Tumbler.qml
new file mode 100644
index 0000000000..59320cf52b
--- /dev/null
+++ b/src/quickcontrols/material/Tumbler.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+
+T.Tumbler {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ delegate: Text {
+ text: modelData
+ color: control.Material.foreground
+ font: control.font
+ opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property var modelData
+ required property int index
+ }
+
+ contentItem: TumblerView {
+ implicitWidth: 60
+ implicitHeight: 200
+ model: control.model
+ delegate: control.delegate
+ path: Path {
+ startX: control.contentItem.width / 2
+ startY: -control.contentItem.delegateHeight / 2
+ PathLine {
+ x: control.contentItem.width / 2
+ y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: control.availableHeight / control.visibleItemCount
+ }
+}
diff --git a/src/quickcontrols/material/VerticalHeaderView.qml b/src/quickcontrols/material/VerticalHeaderView.qml
new file mode 100644
index 0000000000..e497d4a84c
--- /dev/null
+++ b/src/quickcontrols/material/VerticalHeaderView.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+T.VerticalHeaderView {
+ id: control
+
+ implicitWidth: contentWidth
+ implicitHeight: syncView ? syncView.height : 0
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
+ implicitHeight: text.implicitHeight + (cellPadding * 2)
+ color: control.Material.backgroundColor
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: enabled ? control.Material.foreground : control.Material.hintTextColor
+ }
+ }
+}
diff --git a/src/quickcontrols/material/images/arrow-indicator.png b/src/quickcontrols/material/images/arrow-indicator.png
new file mode 100644
index 0000000000..5a9780015b
--- /dev/null
+++ b/src/quickcontrols/material/images/arrow-indicator.png
Binary files differ
diff --git a/src/quickcontrols/material/images/arrow-indicator.svg b/src/quickcontrols/material/images/arrow-indicator.svg
new file mode 100644
index 0000000000..1e7217c855
--- /dev/null
+++ b/src/quickcontrols/material/images/arrow-indicator.svg
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="5"
+ height="10"
+ viewBox="0 0 5 10"
+ version="1.1"
+ id="svg2"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="arrow-indicator.svg">
+ <metadata
+ id="metadata10">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <defs
+ id="defs8" />
+ <sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2560"
+ inkscape:window-height="1571"
+ id="namedview6"
+ showgrid="false"
+ inkscape:zoom="27.812867"
+ inkscape:cx="13.137558"
+ inkscape:cy="12.83583"
+ inkscape:window-x="0"
+ inkscape:window-y="55"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="svg2" />
+ <path
+ d="M 0,10 5,5 0,0 Z"
+ id="path4"
+ inkscape:connector-curvature="0"
+ style="fill:#757575" />
+</svg>
diff --git a/src/quickcontrols/material/images/arrow-indicator@2x.png b/src/quickcontrols/material/images/arrow-indicator@2x.png
new file mode 100644
index 0000000000..37ce3a957e
--- /dev/null
+++ b/src/quickcontrols/material/images/arrow-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/arrow-indicator@3x.png b/src/quickcontrols/material/images/arrow-indicator@3x.png
new file mode 100644
index 0000000000..57abd97295
--- /dev/null
+++ b/src/quickcontrols/material/images/arrow-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/arrow-indicator@4x.png b/src/quickcontrols/material/images/arrow-indicator@4x.png
new file mode 100644
index 0000000000..26d3d7c1f1
--- /dev/null
+++ b/src/quickcontrols/material/images/arrow-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/check.png b/src/quickcontrols/material/images/check.png
new file mode 100644
index 0000000000..756a43a579
--- /dev/null
+++ b/src/quickcontrols/material/images/check.png
Binary files differ
diff --git a/src/quickcontrols/material/images/check@2x.png b/src/quickcontrols/material/images/check@2x.png
new file mode 100644
index 0000000000..9d1d6a32b6
--- /dev/null
+++ b/src/quickcontrols/material/images/check@2x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/check@3x.png b/src/quickcontrols/material/images/check@3x.png
new file mode 100644
index 0000000000..32ed72f017
--- /dev/null
+++ b/src/quickcontrols/material/images/check@3x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/check@4x.png b/src/quickcontrols/material/images/check@4x.png
new file mode 100644
index 0000000000..1767cee617
--- /dev/null
+++ b/src/quickcontrols/material/images/check@4x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/drop-indicator.png b/src/quickcontrols/material/images/drop-indicator.png
new file mode 100644
index 0000000000..93560f507a
--- /dev/null
+++ b/src/quickcontrols/material/images/drop-indicator.png
Binary files differ
diff --git a/src/quickcontrols/material/images/drop-indicator.svg b/src/quickcontrols/material/images/drop-indicator.svg
new file mode 100644
index 0000000000..94b5ca1514
--- /dev/null
+++ b/src/quickcontrols/material/images/drop-indicator.svg
@@ -0,0 +1,5 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" version="1.1">
+ <path d="M7,10l5,5,5-5z" fill="#757575"/>
+</svg>
diff --git a/src/quickcontrols/material/images/drop-indicator@2x.png b/src/quickcontrols/material/images/drop-indicator@2x.png
new file mode 100644
index 0000000000..d32f81604c
--- /dev/null
+++ b/src/quickcontrols/material/images/drop-indicator@2x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/drop-indicator@3x.png b/src/quickcontrols/material/images/drop-indicator@3x.png
new file mode 100644
index 0000000000..34c3e7d115
--- /dev/null
+++ b/src/quickcontrols/material/images/drop-indicator@3x.png
Binary files differ
diff --git a/src/quickcontrols/material/images/drop-indicator@4x.png b/src/quickcontrols/material/images/drop-indicator@4x.png
new file mode 100644
index 0000000000..0613f6dd0d
--- /dev/null
+++ b/src/quickcontrols/material/images/drop-indicator@4x.png
Binary files differ
diff --git a/src/quickcontrols/material/impl/BoxShadow.qml b/src/quickcontrols/material/impl/BoxShadow.qml
new file mode 100644
index 0000000000..f77412d554
--- /dev/null
+++ b/src/quickcontrols/material/impl/BoxShadow.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+/*
+ A implementation of CSS's box-shadow, used by ElevationEffect for a Material Design
+ elevation shadow effect.
+ */
+RectangularGlow {
+ // The 4 properties from CSS box-shadow, plus the inherited color property
+ property int offsetX
+ property int offsetY
+ property int blurRadius
+ property int spreadRadius
+
+ // The source item the shadow is being applied to, used for correctly
+ // calculating the corner radious
+ property Item source
+
+ property bool fullWidth
+ property bool fullHeight
+
+ x: (parent.width - width)/2 + offsetX
+ y: (parent.height - height)/2 + offsetY
+
+ implicitWidth: source ? source.width : parent.width
+ implicitHeight: source ? source.height : parent.height
+
+ width: implicitWidth + 2 * spreadRadius + (fullWidth ? 2 * cornerRadius : 0)
+ height: implicitHeight + 2 * spreadRadius + (fullHeight ? 2 * cornerRadius : 0)
+ glowRadius: blurRadius/2
+ spread: 0.05
+ // qmllint disable unqualified
+ // Intentionally duck-typed (QTBUG-94807)
+ cornerRadius: blurRadius + (source && source.radius || 0)
+}
diff --git a/src/quickcontrols/material/impl/CMakeLists.txt b/src/quickcontrols/material/impl/CMakeLists.txt
new file mode 100644
index 0000000000..8b8e2311b4
--- /dev/null
+++ b/src/quickcontrols/material/impl/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2materialstyleimplplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "BoxShadow.qml"
+ "CheckIndicator.qml"
+ "CursorDelegate.qml"
+ "ElevationEffect.qml"
+ "RadioIndicator.qml"
+ "RectangularGlow.qml"
+ "SliderHandle.qml"
+ "SwitchIndicator.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2materialstyleimplplugin
+ URI "QtQuick.Controls.Material.impl"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2MaterialStyleImplPlugin
+ DEPENDENCIES
+ QtQuick/auto
+ PLUGIN_TARGET qtquickcontrols2materialstyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ SOURCES
+ qquickmaterialbusyindicator.cpp qquickmaterialbusyindicator_p.h
+ qquickmaterialprogressbar.cpp qquickmaterialprogressbar_p.h
+ qquickmaterialripple.cpp qquickmaterialripple_p.h
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
diff --git a/src/quickcontrols/material/impl/CheckIndicator.qml b/src/quickcontrols/material/impl/CheckIndicator.qml
new file mode 100644
index 0000000000..b09567c04b
--- /dev/null
+++ b/src/quickcontrols/material/impl/CheckIndicator.qml
@@ -0,0 +1,87 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+Rectangle {
+ id: indicatorItem
+ implicitWidth: 18
+ implicitHeight: 18
+ color: "transparent"
+ border.color: !control.enabled ? control.Material.hintTextColor
+ : checkState !== Qt.Unchecked ? control.Material.accentColor : control.Material.secondaryTextColor
+ border.width: checkState !== Qt.Unchecked ? width / 2 : 2
+ radius: 2
+
+ property Item control
+ property int checkState: control.checkState
+
+ Behavior on border.width {
+ NumberAnimation {
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+
+ Behavior on border.color {
+ ColorAnimation {
+ duration: 100
+ easing.type: Easing.OutCubic
+ }
+ }
+
+ // TODO: This needs to be transparent
+ Image {
+ id: checkImage
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 14
+ height: 14
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/images/check.png"
+ fillMode: Image.PreserveAspectFit
+
+ scale: indicatorItem.checkState === Qt.Checked ? 1 : 0
+ Behavior on scale { NumberAnimation { duration: 100 } }
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 12
+ height: 3
+
+ scale: indicatorItem.checkState === Qt.PartiallyChecked ? 1 : 0
+ Behavior on scale { NumberAnimation { duration: 100 } }
+ }
+
+ states: [
+ State {
+ name: "checked"
+ when: indicatorItem.checkState === Qt.Checked
+ },
+ State {
+ name: "partiallychecked"
+ when: indicatorItem.checkState === Qt.PartiallyChecked
+ }
+ ]
+
+ transitions: Transition {
+ SequentialAnimation {
+ NumberAnimation {
+ target: indicatorItem
+ property: "scale"
+ // Go down 2 pixels in size.
+ to: 1 - 2 / indicatorItem.width
+ duration: 120
+ }
+ NumberAnimation {
+ target: indicatorItem
+ property: "scale"
+ to: 1
+ duration: 120
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/material/impl/CursorDelegate.qml b/src/quickcontrols/material/impl/CursorDelegate.qml
new file mode 100644
index 0000000000..811aa89e36
--- /dev/null
+++ b/src/quickcontrols/material/impl/CursorDelegate.qml
@@ -0,0 +1,32 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+
+Rectangle {
+ id: cursor
+
+ color: parent.Material.accentColor
+ width: 2
+ visible: parent.activeFocus && !parent.readOnly && parent.selectionStart === parent.selectionEnd
+
+ Connections {
+ target: cursor.parent
+ function onCursorPositionChanged() {
+ // keep a moving cursor visible
+ cursor.opacity = 1
+ timer.restart()
+ }
+ }
+
+ Timer {
+ id: timer
+ running: cursor.parent.activeFocus && !cursor.parent.readOnly && interval != 0
+ repeat: true
+ interval: Qt.styleHints.cursorFlashTime / 2
+ onTriggered: cursor.opacity = !cursor.opacity ? 1 : 0
+ // force the cursor visible when gaining focus
+ onRunningChanged: cursor.opacity = 1
+ }
+}
diff --git a/src/quickcontrols/material/impl/ElevationEffect.qml b/src/quickcontrols/material/impl/ElevationEffect.qml
new file mode 100644
index 0000000000..6690567617
--- /dev/null
+++ b/src/quickcontrols/material/impl/ElevationEffect.qml
@@ -0,0 +1,246 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+/*
+ An effect for standard Material Design elevation shadows. Useful for using as \c layer.effect.
+ */
+Item {
+ id: effect
+
+ /*
+ The source the effect is applied to.
+ */
+ property var source
+
+ /*
+ The elevation of the \l source Item.
+ */
+ property int elevation: 0
+
+ /*
+ Set to \c true if the \l source Item is the same width as its parent and the shadow
+ should be full width instead of rounding around the corner of the Item.
+
+ \sa fullHeight
+ */
+ property bool fullWidth: false
+
+ /*
+ Set to \c true if the \l source Item is the same height as its parent and the shadow
+ should be full height instead of rounding around the corner of the Item.
+
+ \sa fullWidth
+ */
+ property bool fullHeight: false
+
+ /*
+ \internal
+
+ The actual source Item the effect is applied to.
+ */
+ readonly property Item sourceItem: source.sourceItem
+
+ /*
+ * The following shadow values are taken from Angular Material
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2014-2016 Google, Inc. http://angularjs.org
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+ /*
+ \internal
+
+ The shadows to use for each possible elevation. There are three shadows that when combined
+ make up the elevation.
+ */
+ readonly property var _shadows: [
+ [{offset: 0, blur: 0, spread: 0},
+ {offset: 0, blur: 0, spread: 0},
+ {offset: 0, blur: 0, spread: 0}],
+
+ [{offset: 1, blur: 3, spread: 0},
+ {offset: 1, blur: 1, spread: 0},
+ {offset: 2, blur: 1, spread: -1}],
+
+ [{offset: 1, blur: 5, spread: 0},
+ {offset: 2, blur: 2, spread: 0},
+ {offset: 3, blur: 1, spread: -2}],
+
+ [{offset: 1, blur: 8, spread: 0},
+ {offset: 3, blur: 4, spread: 0},
+ {offset: 3, blur: 3, spread: -2}],
+
+ [{offset: 2, blur: 4, spread: -1},
+ {offset: 4, blur: 5, spread: 0},
+ {offset: 1, blur: 10, spread: 0}],
+
+ [{offset: 3, blur: 5, spread: -1},
+ {offset: 5, blur: 8, spread: 0},
+ {offset: 1, blur: 14, spread: 0}],
+
+ [{offset: 3, blur: 5, spread: -1},
+ {offset: 6, blur: 10, spread: 0},
+ {offset: 1, blur: 18, spread: 0}],
+
+ [{offset: 4, blur: 5, spread: -2},
+ {offset: 7, blur: 10, spread: 1},
+ {offset: 2, blur: 16, spread: 1}],
+
+ [{offset: 5, blur: 5, spread: -3},
+ {offset: 8, blur: 10, spread: 1},
+ {offset: 3, blur: 14, spread: 2}],
+
+ [{offset: 5, blur: 6, spread: -3},
+ {offset: 9, blur: 12, spread: 1},
+ {offset: 3, blur: 16, spread: 2}],
+
+ [{offset: 6, blur: 6, spread: -3},
+ {offset: 10, blur: 14, spread: 1},
+ {offset: 4, blur: 18, spread: 3}],
+
+ [{offset: 6, blur: 7, spread: -4},
+ {offset: 11, blur: 15, spread: 1},
+ {offset: 4, blur: 20, spread: 3}],
+
+ [{offset: 7, blur: 8, spread: -4},
+ {offset: 12, blur: 17, spread: 2},
+ {offset: 5, blur: 22, spread: 4}],
+
+ [{offset: 7, blur: 8, spread: -4},
+ {offset: 13, blur: 19, spread: 2},
+ {offset: 5, blur: 24, spread: 4}],
+
+ [{offset: 7, blur: 9, spread: -4},
+ {offset: 14, blur: 21, spread: 2},
+ {offset: 5, blur: 26, spread: 4}],
+
+ [{offset: 8, blur: 9, spread: -5},
+ {offset: 15, blur: 22, spread: 2},
+ {offset: 6, blur: 28, spread: 5}],
+
+ [{offset: 8, blur: 10, spread: -5},
+ {offset: 16, blur: 24, spread: 2},
+ {offset: 6, blur: 30, spread: 5}],
+
+ [{offset: 8, blur: 11, spread: -5},
+ {offset: 17, blur: 26, spread: 2},
+ {offset: 6, blur: 32, spread: 5}],
+
+ [{offset: 9, blur: 11, spread: -5},
+ {offset: 18, blur: 28, spread: 2},
+ {offset: 7, blur: 34, spread: 6}],
+
+ [{offset: 9, blur: 12, spread: -6},
+ {offset: 19, blur: 29, spread: 2},
+ {offset: 7, blur: 36, spread: 6}],
+
+ [{offset: 10, blur: 13, spread: -6},
+ {offset: 20, blur: 31, spread: 3},
+ {offset: 8, blur: 38, spread: 7}],
+
+ [{offset: 10, blur: 13, spread: -6},
+ {offset: 21, blur: 33, spread: 3},
+ {offset: 8, blur: 40, spread: 7}],
+
+ [{offset: 10, blur: 14, spread: -6},
+ {offset: 22, blur: 35, spread: 3},
+ {offset: 8, blur: 42, spread: 7}],
+
+ [{offset: 11, blur: 14, spread: -7},
+ {offset: 23, blur: 36, spread: 3},
+ {offset: 9, blur: 44, spread: 8}],
+
+ [{offset: 11, blur: 15, spread: -7},
+ {offset: 24, blur: 38, spread: 3},
+ {offset: 9, blur: 46, spread: 8}]
+ ]
+
+ /*
+ \internal
+
+ The current shadow based on the elevation.
+ */
+ readonly property var _shadow: _shadows[Math.max(0, Math.min(elevation, _shadows.length - 1))]
+
+ // Nest the shadows and source view in two items rendered as a layer
+ // so the shadow is not clipped by the bounds of the source view
+ Item {
+ property int margin: -100
+
+ x: margin
+ y: margin
+ width: parent.width - 2 * margin
+ height: parent.height - 2 * margin
+
+ // By rendering as a layer, the shadow will never show through the source item,
+ // even when the source item's opacity is less than 1
+ layer.enabled: true
+
+ // The box shadows automatically pick up the size of the source Item and not
+ // the size of the parent, so we don't need to worry about the extra padding
+ // in the parent Item
+ BoxShadow {
+ offsetY: effect._shadow[0].offset
+ blurRadius: effect._shadow[0].blur
+ spreadRadius: effect._shadow[0].spread
+ color: Qt.rgba(0,0,0, 0.2)
+
+ fullWidth: effect.fullWidth
+ fullHeight: effect.fullHeight
+ source: effect.sourceItem
+ }
+
+ BoxShadow {
+ offsetY: effect._shadow[1].offset
+ blurRadius: effect._shadow[1].blur
+ spreadRadius: effect._shadow[1].spread
+ color: Qt.rgba(0,0,0, 0.14)
+
+ fullWidth: effect.fullWidth
+ fullHeight: effect.fullHeight
+ source: effect.sourceItem
+ }
+
+ BoxShadow {
+ offsetY: effect._shadow[2].offset
+ blurRadius: effect._shadow[2].blur
+ spreadRadius: effect._shadow[2].spread
+ color: Qt.rgba(0,0,0, 0.12)
+
+ fullWidth: effect.fullWidth
+ fullHeight: effect.fullHeight
+ source: effect.sourceItem
+ }
+
+ ShaderEffect {
+ property alias source: effect.source
+
+ x: (parent.width - width)/2
+ y: (parent.height - height)/2
+ width: effect.sourceItem.width
+ height: effect.sourceItem.height
+ }
+ }
+}
diff --git a/src/quickcontrols/material/impl/RadioIndicator.qml b/src/quickcontrols/material/impl/RadioIndicator.qml
new file mode 100644
index 0000000000..9570065692
--- /dev/null
+++ b/src/quickcontrols/material/impl/RadioIndicator.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+Rectangle {
+ id: indicator
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: width / 2
+ border.width: 2
+ border.color: !control.enabled ? control.Material.hintTextColor
+ : control.checked || control.down ? control.Material.accentColor : control.Material.secondaryTextColor
+ color: "transparent"
+
+ property T.AbstractButton control
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 10
+ height: 10
+ radius: width / 2
+ color: parent.border.color
+ visible: indicator.control.checked || indicator.control.down
+ }
+}
diff --git a/src/quickcontrols/material/impl/RectangularGlow.qml b/src/quickcontrols/material/impl/RectangularGlow.qml
new file mode 100644
index 0000000000..b604049cf9
--- /dev/null
+++ b/src/quickcontrols/material/impl/RectangularGlow.qml
@@ -0,0 +1,207 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+
+/*
+ A cross-graphics API implementation of QtGraphicalEffects' RectangularGlow.
+ */
+Item {
+ id: rootItem
+
+ /*
+ This property defines how many pixels outside the item area are reached
+ by the glow.
+
+ The value ranges from 0.0 (no glow) to inf (infinite glow). By default,
+ the property is set to \c 0.0.
+
+ \table
+ \header
+ \li Output examples with different glowRadius values
+ \li
+ \li
+ \row
+ \li \image RectangularGlow_glowRadius1.png
+ \li \image RectangularGlow_glowRadius2.png
+ \li \image RectangularGlow_glowRadius3.png
+ \row
+ \li \b { glowRadius: 10 }
+ \li \b { glowRadius: 20 }
+ \li \b { glowRadius: 40 }
+ \row
+ \li \l spread: 0
+ \li \l spread: 0
+ \li \l spread: 0
+ \row
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \row
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \endtable
+
+ */
+ property real glowRadius: 0.0
+
+ /*
+ This property defines how large part of the glow color is strenghtened
+ near the source edges.
+
+ The value ranges from 0.0 (no strenght increase) to 1.0 (maximum
+ strenght increase). By default, the property is set to \c 0.0.
+
+ \table
+ \header
+ \li Output examples with different spread values
+ \li
+ \li
+ \row
+ \li \image RectangularGlow_spread1.png
+ \li \image RectangularGlow_spread2.png
+ \li \image RectangularGlow_spread3.png
+ \row
+ \li \b { spread: 0.0 }
+ \li \b { spread: 0.5 }
+ \li \b { spread: 1.0 }
+ \row
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \row
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \row
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \endtable
+ */
+ property real spread: 0.0
+
+ /*
+ This property defines the RGBA color value which is used for the glow.
+
+ By default, the property is set to \c "white".
+
+ \table
+ \header
+ \li Output examples with different color values
+ \li
+ \li
+ \row
+ \li \image RectangularGlow_color1.png
+ \li \image RectangularGlow_color2.png
+ \li \image RectangularGlow_color3.png
+ \row
+ \li \b { color: #ffffff }
+ \li \b { color: #55ff55 }
+ \li \b { color: #5555ff }
+ \row
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \row
+ \li \l spread: 0
+ \li \l spread: 0
+ \li \l spread: 0
+ \row
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \li \l cornerRadius: 25
+ \endtable
+ */
+ property color color: "white"
+
+ /*
+ This property defines the corner radius that is used to draw a glow with
+ rounded corners.
+
+ The value ranges from 0.0 to half of the effective width or height of
+ the glow, whichever is smaller. This can be calculated with: \c{
+ min(width, height) / 2.0 + glowRadius}
+
+ By default, the property is bound to glowRadius property. The glow
+ behaves as if the rectangle was blurred when adjusting the glowRadius
+ property.
+
+ \table
+ \header
+ \li Output examples with different cornerRadius values
+ \li
+ \li
+ \row
+ \li \image RectangularGlow_cornerRadius1.png
+ \li \image RectangularGlow_cornerRadius2.png
+ \li \image RectangularGlow_cornerRadius3.png
+ \row
+ \li \b { cornerRadius: 0 }
+ \li \b { cornerRadius: 25 }
+ \li \b { cornerRadius: 50 }
+ \row
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \li \l glowRadius: 20
+ \row
+ \li \l spread: 0
+ \li \l spread: 0
+ \li \l spread: 0
+ \row
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \li \l color: #ffffff
+ \endtable
+ */
+ property real cornerRadius: glowRadius
+
+ /*
+ This property allows the effect output pixels to be cached in order to
+ improve the rendering performance.
+
+ Every time the source or effect properties are changed, the pixels in
+ the cache must be updated. Memory consumption is increased, because an
+ extra buffer of memory is required for storing the effect output.
+
+ It is recommended to disable the cache when the source or the effect
+ properties are animated.
+
+ By default, the property is set to \c false.
+ */
+ property bool cached: false
+
+ ShaderEffectSource {
+ id: cacheItem
+ anchors.fill: shaderItem
+ visible: rootItem.cached
+ smooth: true
+ sourceItem: shaderItem
+ live: true
+ hideSource: visible
+ }
+
+ ShaderEffect {
+ id: shaderItem
+
+ x: (parent.width - width) / 2.0
+ y: (parent.height - height) / 2.0
+ width: parent.width + rootItem.glowRadius * 2 + cornerRadius * 2
+ height: parent.height + rootItem.glowRadius * 2 + cornerRadius * 2
+
+ function clampedCornerRadius() {
+ var maxCornerRadius = Math.min(rootItem.width, rootItem.height) / 2 + rootItem.glowRadius;
+ return Math.max(0, Math.min(rootItem.cornerRadius, maxCornerRadius))
+ }
+
+ property color color: rootItem.color
+ property real inverseSpread: 1.0 - rootItem.spread
+ property real relativeSizeX: ((inverseSpread * inverseSpread) * rootItem.glowRadius + cornerRadius * 2.0) / width
+ property real relativeSizeY: relativeSizeX * (width / height)
+ property real spread: rootItem.spread / 2.0
+ property real cornerRadius: clampedCornerRadius()
+
+ fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Controls/Material/shaders/RectangularGlow.frag"
+ }
+}
diff --git a/src/quickcontrols/material/impl/SliderHandle.qml b/src/quickcontrols/material/impl/SliderHandle.qml
new file mode 100644
index 0000000000..ca7912b91d
--- /dev/null
+++ b/src/quickcontrols/material/impl/SliderHandle.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+Item {
+ id: root
+ implicitWidth: initialSize
+ implicitHeight: initialSize
+
+ property real value: 0
+ property bool handleHasFocus: false
+ property bool handlePressed: false
+ property bool handleHovered: false
+ readonly property int initialSize: 13
+ readonly property var control: parent
+
+ Rectangle {
+ id: handleRect
+ width: parent.width
+ height: parent.height
+ radius: width / 2
+ scale: root.handlePressed ? 1.5 : 1
+ color: root.control.enabled ? root.control.Material.accentColor : root.control.Material.sliderDisabledColor
+
+ Behavior on scale {
+ NumberAnimation {
+ duration: 250
+ }
+ }
+ }
+
+ Ripple {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: 22; height: 22
+ pressed: root.handlePressed
+ active: root.handlePressed || root.handleHasFocus || (enabled && root.handleHovered)
+ color: root.control.Material.highlightedRippleColor
+ }
+}
diff --git a/src/quickcontrols/material/impl/SwitchIndicator.qml b/src/quickcontrols/material/impl/SwitchIndicator.qml
new file mode 100644
index 0000000000..e439bc31b7
--- /dev/null
+++ b/src/quickcontrols/material/impl/SwitchIndicator.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Material
+import QtQuick.Controls.Material.impl
+
+Item {
+ id: indicator
+ implicitWidth: 38
+ implicitHeight: 32
+
+ property T.AbstractButton control
+ property alias handle: handle
+
+ Material.elevation: 1
+
+ Rectangle {
+ width: parent.width
+ height: 14
+ radius: height / 2
+ y: parent.height / 2 - height / 2
+ color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedTrackColor : indicator.control.Material.switchUncheckedTrackColor)
+ : indicator.control.Material.switchDisabledTrackColor
+ }
+
+ Rectangle {
+ id: handle
+ x: Math.max(0, Math.min(parent.width - width, indicator.control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+ width: 20
+ height: 20
+ radius: width / 2
+ color: indicator.control.enabled ? (indicator.control.checked ? indicator.control.Material.switchCheckedHandleColor : indicator.control.Material.switchUncheckedHandleColor)
+ : indicator.control.Material.switchDisabledHandleColor
+
+ Behavior on x {
+ enabled: !indicator.control.pressed
+ SmoothedAnimation {
+ duration: 300
+ }
+ }
+ layer.enabled: indicator.Material.elevation > 0
+ layer.effect: ElevationEffect {
+ elevation: indicator.Material.elevation
+ }
+ }
+}
diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp
new file mode 100644
index 0000000000..4d5b4e13e7
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator.cpp
@@ -0,0 +1,214 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialbusyindicator_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtCore/qeasingcurve.h>
+#include <QtGui/qpainter.h>
+#include <QtQuick/qsgimagenode.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*
+ Relevant Android code:
+
+ - core/res/res/anim/progress_indeterminate_rotation_material.xml contains
+ the rotation animation data.
+ - core/res/res/anim/progress_indeterminate_material.xml contains the trim
+ animation data.
+ - core/res/res/interpolator/trim_start_interpolator.xml and
+ core/res/res/interpolator/trim_end_interpolator.xml contain the start
+ and end trim path interpolators.
+ - addCommand() in core/java/android/util/PathParser.java has a list of the
+ different path commands available.
+*/
+
+static const int SpanAnimationDuration = 700;
+static const int RotationAnimationDuration = SpanAnimationDuration * 6;
+static const int TargetRotation = 720;
+static const int OneDegree = 16;
+static const qreal MinSweepSpan = 10 * OneDegree;
+static const qreal MaxSweepSpan = 300 * OneDegree;
+
+class QQuickMaterialBusyIndicatorNode : public QQuickAnimatedNode
+{
+public:
+ QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item);
+
+ void sync(QQuickItem *item) override;
+
+protected:
+ void updateCurrentTime(int time) override;
+
+private:
+ int m_lastStartAngle = 0;
+ int m_lastEndAngle = 0;
+ qreal m_width = 0;
+ qreal m_height = 0;
+ qreal m_devicePixelRatio = 1;
+ QColor m_color;
+};
+
+QQuickMaterialBusyIndicatorNode::QQuickMaterialBusyIndicatorNode(QQuickMaterialBusyIndicator *item)
+ : QQuickAnimatedNode(item)
+{
+ setLoopCount(Infinite);
+ setCurrentTime(item->elapsed());
+ setDuration(RotationAnimationDuration);
+
+ QSGImageNode *textureNode = item->window()->createImageNode();
+ textureNode->setOwnsTexture(true);
+ appendChildNode(textureNode);
+
+ // A texture seems to be required here, but we don't have one yet, as we haven't drawn anything,
+ // so just use a blank image.
+ QImage blankImage(item->width(), item->height(), QImage::Format_ARGB32_Premultiplied);
+ blankImage.fill(Qt::transparent);
+ textureNode->setTexture(item->window()->createTextureFromImage(blankImage));
+}
+
+void QQuickMaterialBusyIndicatorNode::updateCurrentTime(int time)
+{
+ const qreal w = m_width;
+ const qreal h = m_height;
+ const qreal size = qMin(w, h);
+ const qreal dx = (w - size) / 2;
+ const qreal dy = (h - size) / 2;
+
+ QImage image(size * m_devicePixelRatio, size * m_devicePixelRatio, QImage::Format_ARGB32_Premultiplied);
+ image.fill(Qt::transparent);
+
+ QPainter painter(&image);
+ painter.setRenderHint(QPainter::Antialiasing);
+
+ QPen pen;
+ QSGImageNode *textureNode = static_cast<QSGImageNode *>(firstChild());
+ pen.setColor(m_color);
+ pen.setWidth(qCeil(size / 12) * m_devicePixelRatio);
+ painter.setPen(pen);
+
+ const qreal percentageComplete = time / qreal(RotationAnimationDuration);
+ const qreal spanPercentageComplete = (time % SpanAnimationDuration) / qreal(SpanAnimationDuration);
+ const int iteration = time / SpanAnimationDuration;
+ int startAngle = 0;
+ int endAngle = 0;
+
+ if (iteration % 2 == 0) {
+ if (m_lastStartAngle > 360 * OneDegree)
+ m_lastStartAngle -= 360 * OneDegree;
+
+ // The start angle is only affected by the rotation animation for the "grow" phase.
+ startAngle = m_lastStartAngle;
+ QEasingCurve angleCurve(QEasingCurve::OutQuad);
+ const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete);
+ endAngle = m_lastStartAngle + MinSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan);
+ m_lastEndAngle = endAngle;
+ } else {
+ // Both the start angle *and* the span are affected by the "shrink" phase.
+ QEasingCurve angleCurve(QEasingCurve::InQuad);
+ const qreal percentage = angleCurve.valueForProgress(spanPercentageComplete);
+ startAngle = m_lastEndAngle - MaxSweepSpan + percentage * (MaxSweepSpan - MinSweepSpan);
+ endAngle = m_lastEndAngle;
+ m_lastStartAngle = startAngle;
+ }
+
+ const int halfPen = pen.width() / 2;
+ const QRectF arcBounds = QRectF(halfPen, halfPen,
+ m_devicePixelRatio * size - pen.width(),
+ m_devicePixelRatio * size - pen.width());
+ // The current angle of the rotation animation.
+ const qreal rotation = OneDegree * percentageComplete * -TargetRotation;
+ startAngle -= rotation;
+ endAngle -= rotation;
+ const int angleSpan = endAngle - startAngle;
+ painter.drawArc(arcBounds, -startAngle, -angleSpan);
+ painter.end();
+
+ textureNode->setRect(QRectF(dx, dy, size, size));
+ textureNode->setTexture(window()->createTextureFromImage(image));
+}
+
+void QQuickMaterialBusyIndicatorNode::sync(QQuickItem *item)
+{
+ QQuickMaterialBusyIndicator *indicator = static_cast<QQuickMaterialBusyIndicator *>(item);
+ m_color = indicator->color();
+ m_width = indicator->width();
+ m_height = indicator->height();
+ m_devicePixelRatio = indicator->window()->effectiveDevicePixelRatio();
+}
+
+QQuickMaterialBusyIndicator::QQuickMaterialBusyIndicator(QQuickItem *parent) :
+ QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+QColor QQuickMaterialBusyIndicator::color() const
+{
+ return m_color;
+}
+
+void QQuickMaterialBusyIndicator::setColor(const QColor &color)
+{
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+bool QQuickMaterialBusyIndicator::isRunning() const
+{
+ return isVisible();
+}
+
+void QQuickMaterialBusyIndicator::setRunning(bool running)
+{
+ if (running)
+ setVisible(true);
+}
+
+int QQuickMaterialBusyIndicator::elapsed() const
+{
+ return m_elapsed;
+}
+
+void QQuickMaterialBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ switch (change) {
+ case ItemOpacityHasChanged:
+ if (qFuzzyIsNull(data.realValue))
+ setVisible(false);
+ break;
+ case ItemVisibleHasChanged:
+ update();
+ break;
+ default:
+ break;
+ }
+}
+
+QSGNode *QQuickMaterialBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+ QQuickMaterialBusyIndicatorNode *node = static_cast<QQuickMaterialBusyIndicatorNode *>(oldNode);
+ if (isRunning() && width() > 0 && height() > 0) {
+ if (!node) {
+ node = new QQuickMaterialBusyIndicatorNode(this);
+ node->start();
+ }
+ node->sync(this);
+ } else {
+ m_elapsed = node ? node->currentTime() : 0;
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickmaterialbusyindicator_p.cpp"
diff --git a/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h
new file mode 100644
index 0000000000..b6bbd925c7
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialbusyindicator_p.h
@@ -0,0 +1,56 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKMATERIALBUSYINDICATOR_P_H
+#define QQUICKMATERIALBUSYINDICATOR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickitem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickMaterialBusyIndicator : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(bool running READ isRunning WRITE setRunning FINAL)
+ QML_NAMED_ELEMENT(BusyIndicatorImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickMaterialBusyIndicator(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ bool isRunning() const;
+ void setRunning(bool running);
+
+ int elapsed() const;
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ int m_elapsed = 0;
+ QColor m_color = Qt::black;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickMaterialBusyIndicator)
+
+#endif // QQUICKMATERIALBUSYINDICATOR_P_H
diff --git a/src/quickcontrols/material/impl/qquickmaterialprogressbar.cpp b/src/quickcontrols/material/impl/qquickmaterialprogressbar.cpp
new file mode 100644
index 0000000000..67c9f614f5
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialprogressbar.cpp
@@ -0,0 +1,214 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialprogressbar_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtCore/qeasingcurve.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuick/qsgrectanglenode.h>
+#include <QtQuick/qsgimagenode.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int PauseDuration = 520;
+static const int SlideDuration = 1240;
+static const int TotalDuration = SlideDuration + PauseDuration;
+
+class QQuickMaterialProgressBarNode : public QQuickAnimatedNode
+{
+public:
+ QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ void moveNode(QSGTransformNode *node, const QRectF &geometry, qreal progress);
+
+ bool m_indeterminate = false;
+ QEasingCurve m_easing = QEasingCurve::OutCubic;
+};
+
+QQuickMaterialProgressBarNode::QQuickMaterialProgressBarNode(QQuickMaterialProgressBar *item)
+ : QQuickAnimatedNode(item)
+{
+ setLoopCount(Infinite);
+ setDuration(TotalDuration);
+}
+
+void QQuickMaterialProgressBarNode::updateCurrentTime(int time)
+{
+ QSGRectangleNode *geometryNode = static_cast<QSGRectangleNode *>(firstChild());
+ Q_ASSERT(geometryNode->type() == QSGNode::GeometryNodeType);
+ const QRectF geometry = geometryNode->rect();
+
+ QSGTransformNode *firstNode = static_cast<QSGTransformNode *>(geometryNode->firstChild());
+ if (firstNode) {
+ Q_ASSERT(firstNode->type() == QSGNode::TransformNodeType);
+
+ const qreal progress = qMin<qreal>(1.0, static_cast<qreal>(time) / SlideDuration);
+ moveNode(static_cast<QSGTransformNode *>(firstNode), geometry, progress);
+ }
+
+ QSGTransformNode *secondNode = static_cast<QSGTransformNode *>(geometryNode->lastChild());
+ if (secondNode) {
+ Q_ASSERT(secondNode->type() == QSGNode::TransformNodeType);
+
+ const qreal progress = qMax<qreal>(0.0, static_cast<qreal>(time - PauseDuration) / SlideDuration);
+ moveNode(static_cast<QSGTransformNode *>(secondNode), geometry, progress);
+ }
+}
+
+void QQuickMaterialProgressBarNode::sync(QQuickItem *item)
+{
+ QQuickMaterialProgressBar *bar = static_cast<QQuickMaterialProgressBar *>(item);
+ if (m_indeterminate != bar->isIndeterminate()) {
+ m_indeterminate = bar->isIndeterminate();
+ if (m_indeterminate)
+ start();
+ else
+ stop();
+ }
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+
+ QRectF bounds = item->boundingRect();
+ bounds.setHeight(item->implicitHeight());
+ bounds.moveTop((item->height() - bounds.height()) / 2.0);
+
+ QSGRectangleNode *geometryNode = static_cast<QSGRectangleNode *>(firstChild());
+ if (!geometryNode) {
+ geometryNode = item->window()->createRectangleNode();
+ geometryNode->setColor(Qt::transparent);
+ appendChildNode(geometryNode);
+ }
+ geometryNode->setRect(bounds);
+
+ const int count = m_indeterminate ? 2 : 1;
+ const qreal w = m_indeterminate ? 0 : bar->progress() * item->width();
+ const QRectF rect(0, bounds.y(), w, bounds.height());
+
+ QSGNode *transformNode = geometryNode->firstChild();
+ for (int i = 0; i < count; ++i) {
+ if (!transformNode) {
+ transformNode = new QSGTransformNode;
+ geometryNode->appendChildNode(transformNode);
+
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ transformNode->appendChildNode(rectNode);
+ }
+ Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
+ static_cast<QSGTransformNode *>(transformNode)->setMatrix(QMatrix4x4());
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(transformNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ rectNode->setRect(rect);
+ rectNode->setColor(bar->color());
+ rectNode->update();
+
+ transformNode = transformNode->nextSibling();
+ }
+
+ while (transformNode) {
+ QSGNode *nextSibling = transformNode->nextSibling();
+ delete transformNode;
+ transformNode = nextSibling;
+ }
+}
+
+void QQuickMaterialProgressBarNode::moveNode(QSGTransformNode *transformNode, const QRectF &geometry, qreal progress)
+{
+ const qreal value = m_easing.valueForProgress(progress);
+ const qreal x = value * geometry.width();
+
+ QMatrix4x4 matrix;
+ matrix.translate(x, 0);
+ transformNode->setMatrix(matrix);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(transformNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ QRectF r = geometry;
+ r.setWidth(value * (geometry.width() - x));
+ rectNode->setRect(r);
+ rectNode->update();
+}
+
+QQuickMaterialProgressBar::QQuickMaterialProgressBar(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+QColor QQuickMaterialProgressBar::color() const
+{
+ return m_color;
+}
+
+void QQuickMaterialProgressBar::setColor(const QColor &color)
+{
+ if (color == m_color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+qreal QQuickMaterialProgressBar::progress() const
+{
+ return m_progress;
+}
+
+void QQuickMaterialProgressBar::setProgress(qreal progress)
+{
+ if (progress == m_progress)
+ return;
+
+ m_progress = progress;
+ update();
+}
+
+bool QQuickMaterialProgressBar::isIndeterminate() const
+{
+ return m_indeterminate;
+}
+
+void QQuickMaterialProgressBar::setIndeterminate(bool indeterminate)
+{
+ if (indeterminate == m_indeterminate)
+ return;
+
+ m_indeterminate = indeterminate;
+ update();
+}
+
+void QQuickMaterialProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ if (change == ItemVisibleHasChanged)
+ update();
+}
+
+QSGNode *QQuickMaterialProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
+{
+ QQuickMaterialProgressBarNode *node = static_cast<QQuickMaterialProgressBarNode *>(oldNode);
+ if (isVisible() && width() > 0 && height() > 0) {
+ if (!node)
+ node = new QQuickMaterialProgressBarNode(this);
+ node->sync(this);
+ } else {
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickmaterialprogressbar_p.cpp"
diff --git a/src/quickcontrols/material/impl/qquickmaterialprogressbar_p.h b/src/quickcontrols/material/impl/qquickmaterialprogressbar_p.h
new file mode 100644
index 0000000000..d250c2f76d
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialprogressbar_p.h
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKMATERIALPROGRESSBAR_P_H
+#define QQUICKMATERIALPROGRESSBAR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickitem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickMaterialProgressBar : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL)
+ Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL)
+ QML_NAMED_ELEMENT(ProgressBarImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickMaterialProgressBar(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ qreal progress() const;
+ void setProgress(qreal progress);
+
+ bool isIndeterminate() const;
+ void setIndeterminate(bool indeterminate);
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ QColor m_color = Qt::black;
+ qreal m_progress = 0.0;
+ bool m_indeterminate = false;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickMaterialProgressBar)
+
+#endif // QQUICKMATERIALPROGRESSBAR_P_H
diff --git a/src/quickcontrols/material/impl/qquickmaterialripple.cpp b/src/quickcontrols/material/impl/qquickmaterialripple.cpp
new file mode 100644
index 0000000000..04e171f190
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialripple.cpp
@@ -0,0 +1,411 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialripple_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
+#include <QtQuickTemplates2/private/qquickabstractbutton_p_p.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace {
+ enum WavePhase { WaveEnter, WaveExit };
+}
+
+static const int RIPPLE_ENTER_DELAY = 80;
+static const int OPACITY_ENTER_DURATION_FAST = 120;
+static const int WAVE_OPACITY_DECAY_DURATION = 333;
+static const qreal WAVE_TOUCH_DOWN_ACCELERATION = 1024.0;
+
+class QQuickMaterialRippleWaveNode : public QQuickAnimatedNode
+{
+public:
+ QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple);
+
+ void exit();
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ qreal m_from = 0;
+ qreal m_to = 0;
+ qreal m_value = 0;
+ WavePhase m_phase = WaveEnter;
+ QPointF m_anchor;
+ QRectF m_bounds;
+};
+
+QQuickMaterialRippleWaveNode::QQuickMaterialRippleWaveNode(QQuickMaterialRipple *ripple)
+ : QQuickAnimatedNode(ripple)
+{
+ start(qRound(1000.0 * qSqrt(ripple->diameter() / 2.0 / WAVE_TOUCH_DOWN_ACCELERATION)));
+
+ QSGOpacityNode *opacityNode = new QSGOpacityNode;
+ appendChildNode(opacityNode);
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(ripple);
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ opacityNode->appendChildNode(rectNode);
+}
+
+void QQuickMaterialRippleWaveNode::exit()
+{
+ m_phase = WaveExit;
+ m_from = m_value;
+ setDuration(WAVE_OPACITY_DECAY_DURATION);
+ restart();
+ connect(this, &QQuickAnimatedNode::stopped, this, &QObject::deleteLater);
+}
+
+void QQuickMaterialRippleWaveNode::updateCurrentTime(int time)
+{
+ qreal p = 1.0;
+ if (duration() > 0)
+ p = time / static_cast<qreal>(duration());
+
+ m_value = m_from + (m_to - m_from) * p;
+ p = m_value / m_to;
+
+ const qreal dx = (1.0 - p) * (m_anchor.x() - m_bounds.width() / 2);
+ const qreal dy = (1.0 - p) * (m_anchor.y() - m_bounds.height() / 2);
+
+ QMatrix4x4 m;
+ m.translate(qRound((m_bounds.width() - m_value) / 2 + dx),
+ qRound((m_bounds.height() - m_value) / 2 + dy));
+ setMatrix(m);
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+ qreal opacity = 1.0;
+ if (m_phase == WaveExit)
+ opacity -= static_cast<qreal>(time) / WAVE_OPACITY_DECAY_DURATION;
+ opacityNode->setOpacity(opacity);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(opacityNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+ rectNode->setRect(QRectF(0, 0, m_value, m_value));
+ rectNode->setRadius(m_value / 2);
+ rectNode->update();
+}
+
+void QQuickMaterialRippleWaveNode::sync(QQuickItem *item)
+{
+ QQuickMaterialRipple *ripple = static_cast<QQuickMaterialRipple *>(item);
+ m_to = ripple->diameter();
+ m_anchor = ripple->anchorPoint();
+ m_bounds = ripple->boundingRect();
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(opacityNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+ rectNode->setColor(ripple->color());
+}
+
+class QQuickMaterialRippleBackgroundNode : public QQuickAnimatedNode
+{
+ Q_OBJECT
+
+public:
+ QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ bool m_active = false;
+};
+
+QQuickMaterialRippleBackgroundNode::QQuickMaterialRippleBackgroundNode(QQuickMaterialRipple *ripple)
+ : QQuickAnimatedNode(ripple)
+{
+ setDuration(OPACITY_ENTER_DURATION_FAST);
+
+ QSGOpacityNode *opacityNode = new QSGOpacityNode;
+ opacityNode->setOpacity(0.0);
+ appendChildNode(opacityNode);
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(ripple);
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ opacityNode->appendChildNode(rectNode);
+}
+
+void QQuickMaterialRippleBackgroundNode::updateCurrentTime(int time)
+{
+ qreal opacity = time / static_cast<qreal>(duration());
+ if (!m_active)
+ opacity = 1.0 - opacity;
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+ opacityNode->setOpacity(opacity);
+}
+
+void QQuickMaterialRippleBackgroundNode::sync(QQuickItem *item)
+{
+ QQuickMaterialRipple *ripple = static_cast<QQuickMaterialRipple *>(item);
+ if (m_active != ripple->isActive()) {
+ m_active = ripple->isActive();
+ setDuration(m_active ? OPACITY_ENTER_DURATION_FAST : WAVE_OPACITY_DECAY_DURATION);
+ restart();
+ }
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(opacityNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ const qreal w = ripple->width();
+ const qreal h = ripple->height();
+ const qreal sz = qSqrt(w * w + h * h);
+
+ QMatrix4x4 matrix;
+ if (qFuzzyIsNull(ripple->clipRadius())) {
+ matrix.translate(qRound((w - sz) / 2), qRound((h - sz) / 2));
+ rectNode->setRect(QRectF(0, 0, sz, sz));
+ rectNode->setRadius(sz / 2);
+ } else {
+ rectNode->setRect(QRectF(0, 0, w, h));
+ rectNode->setRadius(ripple->clipRadius());
+ }
+
+ setMatrix(matrix);
+ rectNode->setColor(ripple->color());
+ rectNode->update();
+}
+
+QQuickMaterialRipple::QQuickMaterialRipple(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+bool QQuickMaterialRipple::isActive() const
+{
+ return m_active;
+}
+
+void QQuickMaterialRipple::setActive(bool active)
+{
+ if (active == m_active)
+ return;
+
+ m_active = active;
+ update();
+}
+
+QColor QQuickMaterialRipple::color() const
+{
+ return m_color;
+}
+
+void QQuickMaterialRipple::setColor(const QColor &color)
+{
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+qreal QQuickMaterialRipple::clipRadius() const
+{
+ return m_clipRadius;
+}
+
+void QQuickMaterialRipple::setClipRadius(qreal radius)
+{
+ if (qFuzzyCompare(m_clipRadius, radius))
+ return;
+
+ m_clipRadius = radius;
+ setClip(!qFuzzyIsNull(radius));
+ update();
+}
+
+bool QQuickMaterialRipple::isPressed() const
+{
+ return m_pressed;
+}
+
+void QQuickMaterialRipple::setPressed(bool pressed)
+{
+ if (pressed == m_pressed)
+ return;
+
+ m_pressed = pressed;
+
+ if (!isEnabled()) {
+ exitWave();
+ return;
+ }
+
+ if (pressed) {
+ if (m_trigger == Press)
+ prepareWave();
+ else
+ exitWave();
+ } else {
+ if (m_trigger == Release)
+ enterWave();
+ else
+ exitWave();
+ }
+}
+
+QQuickMaterialRipple::Trigger QQuickMaterialRipple::trigger() const
+{
+ return m_trigger;
+}
+
+void QQuickMaterialRipple::setTrigger(Trigger trigger)
+{
+ m_trigger = trigger;
+}
+
+QPointF QQuickMaterialRipple::anchorPoint() const
+{
+ const QRectF bounds = boundingRect();
+ const QPointF center = bounds.center();
+ if (!m_anchor)
+ return center;
+
+ QPointF anchorPoint = bounds.center();
+ if (QQuickAbstractButton *button = qobject_cast<QQuickAbstractButton *>(m_anchor))
+ anchorPoint = QQuickAbstractButtonPrivate::get(button)->pressPoint;
+ anchorPoint = mapFromItem(m_anchor, anchorPoint);
+
+ // calculate whether the anchor point is within the ripple circle bounds,
+ // that is, whether waves should start expanding from the anchor point
+ const qreal r = qSqrt(bounds.width() * bounds.width() + bounds.height() * bounds.height()) / 2;
+ if (QLineF(center, anchorPoint).length() < r)
+ return anchorPoint;
+
+ // if the anchor point is outside the ripple circle bounds, start expanding
+ // from the intersection point of the ripple circle and a line from its center
+ // to the the anchor point
+ const qreal p = qAtan2(anchorPoint.y() - center.y(), anchorPoint.x() - center.x());
+ return QPointF(center.x() + r * qCos(p), center.y() + r * qSin(p));
+}
+
+QQuickItem *QQuickMaterialRipple::anchor() const
+{
+ return m_anchor;
+}
+
+void QQuickMaterialRipple::setAnchor(QQuickItem *item)
+{
+ m_anchor = item;
+}
+
+qreal QQuickMaterialRipple::diameter() const
+{
+ const qreal w = width();
+ const qreal h = height();
+ return qSqrt(w * w + h * h);
+}
+
+void QQuickMaterialRipple::itemChange(ItemChange change, const ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+}
+
+QSGNode *QQuickMaterialRipple::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+ QQuickItemPrivate *d = QQuickItemPrivate::get(this);
+ QQuickDefaultClipNode *clipNode = d->clipNode();
+ if (clipNode) {
+ // TODO: QTBUG-51894
+ // clipNode->setRadius(m_clipRadius);
+ clipNode->setRect(boundingRect());
+ clipNode->update();
+ }
+
+ QSGNode *container = oldNode;
+ if (!container)
+ container = new QSGNode;
+
+ QQuickMaterialRippleBackgroundNode *backgroundNode = static_cast<QQuickMaterialRippleBackgroundNode *>(container->firstChild());
+ if (!backgroundNode) {
+ backgroundNode = new QQuickMaterialRippleBackgroundNode(this);
+ backgroundNode->setObjectName(objectName());
+ container->appendChildNode(backgroundNode);
+ }
+ backgroundNode->sync(this);
+
+ // enter new waves
+ int i = m_waves;
+ QQuickMaterialRippleWaveNode *enterNode = static_cast<QQuickMaterialRippleWaveNode *>(backgroundNode->nextSibling());
+ while (i-- > 0) {
+ if (!enterNode) {
+ enterNode = new QQuickMaterialRippleWaveNode(this);
+ container->appendChildNode(enterNode);
+ }
+ enterNode->sync(this);
+ enterNode = static_cast<QQuickMaterialRippleWaveNode *>(enterNode->nextSibling());
+ }
+
+ // exit old waves
+ int j = container->childCount() - 1 - m_waves;
+ while (j-- > 0) {
+ QQuickMaterialRippleWaveNode *exitNode = static_cast<QQuickMaterialRippleWaveNode *>(backgroundNode->nextSibling());
+ if (exitNode) {
+ exitNode->exit();
+ exitNode->sync(this);
+ }
+ }
+
+ return container;
+}
+
+void QQuickMaterialRipple::timerEvent(QTimerEvent *event)
+{
+ QQuickItem::timerEvent(event);
+
+ if (event->timerId() == m_enterDelay)
+ enterWave();
+}
+
+void QQuickMaterialRipple::prepareWave()
+{
+ if (m_enterDelay <= 0)
+ m_enterDelay = startTimer(RIPPLE_ENTER_DELAY);
+}
+
+void QQuickMaterialRipple::enterWave()
+{
+ if (m_enterDelay > 0) {
+ killTimer(m_enterDelay);
+ m_enterDelay = 0;
+ }
+
+ ++m_waves;
+ update();
+}
+
+void QQuickMaterialRipple::exitWave()
+{
+ if (m_enterDelay > 0) {
+ killTimer(m_enterDelay);
+ m_enterDelay = 0;
+ }
+
+ if (m_waves > 0) {
+ --m_waves;
+ update();
+ }
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickmaterialripple_p.cpp"
+
+#include "qquickmaterialripple.moc"
diff --git a/src/quickcontrols/material/impl/qquickmaterialripple_p.h b/src/quickcontrols/material/impl/qquickmaterialripple_p.h
new file mode 100644
index 0000000000..cdaaf13b1a
--- /dev/null
+++ b/src/quickcontrols/material/impl/qquickmaterialripple_p.h
@@ -0,0 +1,88 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKMATERIALRIPPLE_P_H
+#define QQUICKMATERIALRIPPLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickitem.h>
+#include <QtGui/qcolor.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickMaterialRipple : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(qreal clipRadius READ clipRadius WRITE setClipRadius FINAL)
+ Q_PROPERTY(bool pressed READ isPressed WRITE setPressed FINAL)
+ Q_PROPERTY(bool active READ isActive WRITE setActive FINAL)
+ Q_PROPERTY(QQuickItem *anchor READ anchor WRITE setAnchor FINAL)
+ Q_PROPERTY(Trigger trigger READ trigger WRITE setTrigger FINAL)
+ QML_NAMED_ELEMENT(Ripple)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ QQuickMaterialRipple(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ qreal clipRadius() const;
+ void setClipRadius(qreal radius);
+
+ bool isActive() const;
+ void setActive(bool active);
+
+ bool isPressed() const;
+ void setPressed(bool pressed);
+
+ enum Trigger { Press, Release };
+ Q_ENUM (Trigger)
+
+ Trigger trigger() const;
+ void setTrigger(Trigger trigger);
+
+ QPointF anchorPoint() const;
+
+ QQuickItem *anchor() const;
+ void setAnchor(QQuickItem *anchor);
+
+ qreal diameter() const;
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+ void timerEvent(QTimerEvent *event) override;
+
+ void prepareWave();
+ void enterWave();
+ void exitWave();
+
+private:
+ bool m_active = false;
+ bool m_pressed = false;
+ int m_waves = 0;
+ int m_enterDelay = 0;
+ Trigger m_trigger = Press;
+ qreal m_clipRadius = 0.0;
+ QColor m_color;
+ QQuickItem *m_anchor = nullptr;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickMaterialRipple)
+
+#endif // QQUICKMATERIALRIPPLE_P_H
diff --git a/src/quickcontrols/material/qquickmaterialstyle.cpp b/src/quickcontrols/material/qquickmaterialstyle.cpp
new file mode 100644
index 0000000000..dbe7347acc
--- /dev/null
+++ b/src/quickcontrols/material/qquickmaterialstyle.cpp
@@ -0,0 +1,1363 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialstyle_p.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qsettings.h>
+#include <QtQml/qqmlinfo.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const QRgb colors[][14] = {
+ // Red
+ {
+ 0xFFFFEBEE, // Shade50
+ 0xFFFFCDD2, // Shade100
+ 0xFFEF9A9A, // Shade200
+ 0xFFE57373, // Shade300
+ 0xFFEF5350, // Shade400
+ 0xFFF44336, // Shade500
+ 0xFFE53935, // Shade600
+ 0xFFD32F2F, // Shade700
+ 0xFFC62828, // Shade800
+ 0xFFB71C1C, // Shade900
+ 0xFFFF8A80, // ShadeA100
+ 0xFFFF5252, // ShadeA200
+ 0xFFFF1744, // ShadeA400
+ 0xFFD50000 // ShadeA700
+ },
+ // Pink
+ {
+ 0xFFFCE4EC, // Shade50
+ 0xFFF8BBD0, // Shade100
+ 0xFFF48FB1, // Shade200
+ 0xFFF06292, // Shade300
+ 0xFFEC407A, // Shade400
+ 0xFFE91E63, // Shade500
+ 0xFFD81B60, // Shade600
+ 0xFFC2185B, // Shade700
+ 0xFFAD1457, // Shade800
+ 0xFF880E4F, // Shade900
+ 0xFFFF80AB, // ShadeA100
+ 0xFFFF4081, // ShadeA200
+ 0xFFF50057, // ShadeA400
+ 0xFFC51162 // ShadeA700
+ },
+ // Purple
+ {
+ 0xFFF3E5F5, // Shade50
+ 0xFFE1BEE7, // Shade100
+ 0xFFCE93D8, // Shade200
+ 0xFFBA68C8, // Shade300
+ 0xFFAB47BC, // Shade400
+ 0xFF9C27B0, // Shade500
+ 0xFF8E24AA, // Shade600
+ 0xFF7B1FA2, // Shade700
+ 0xFF6A1B9A, // Shade800
+ 0xFF4A148C, // Shade900
+ 0xFFEA80FC, // ShadeA100
+ 0xFFE040FB, // ShadeA200
+ 0xFFD500F9, // ShadeA400
+ 0xFFAA00FF // ShadeA700
+ },
+ // DeepPurple
+ {
+ 0xFFEDE7F6, // Shade50
+ 0xFFD1C4E9, // Shade100
+ 0xFFB39DDB, // Shade200
+ 0xFF9575CD, // Shade300
+ 0xFF7E57C2, // Shade400
+ 0xFF673AB7, // Shade500
+ 0xFF5E35B1, // Shade600
+ 0xFF512DA8, // Shade700
+ 0xFF4527A0, // Shade800
+ 0xFF311B92, // Shade900
+ 0xFFB388FF, // ShadeA100
+ 0xFF7C4DFF, // ShadeA200
+ 0xFF651FFF, // ShadeA400
+ 0xFF6200EA // ShadeA700
+ },
+ // Indigo
+ {
+ 0xFFE8EAF6, // Shade50
+ 0xFFC5CAE9, // Shade100
+ 0xFF9FA8DA, // Shade200
+ 0xFF7986CB, // Shade300
+ 0xFF5C6BC0, // Shade400
+ 0xFF3F51B5, // Shade500
+ 0xFF3949AB, // Shade600
+ 0xFF303F9F, // Shade700
+ 0xFF283593, // Shade800
+ 0xFF1A237E, // Shade900
+ 0xFF8C9EFF, // ShadeA100
+ 0xFF536DFE, // ShadeA200
+ 0xFF3D5AFE, // ShadeA400
+ 0xFF304FFE // ShadeA700
+ },
+ // Blue
+ {
+ 0xFFE3F2FD, // Shade50
+ 0xFFBBDEFB, // Shade100
+ 0xFF90CAF9, // Shade200
+ 0xFF64B5F6, // Shade300
+ 0xFF42A5F5, // Shade400
+ 0xFF2196F3, // Shade500
+ 0xFF1E88E5, // Shade600
+ 0xFF1976D2, // Shade700
+ 0xFF1565C0, // Shade800
+ 0xFF0D47A1, // Shade900
+ 0xFF82B1FF, // ShadeA100
+ 0xFF448AFF, // ShadeA200
+ 0xFF2979FF, // ShadeA400
+ 0xFF2962FF // ShadeA700
+ },
+ // LightBlue
+ {
+ 0xFFE1F5FE, // Shade50
+ 0xFFB3E5FC, // Shade100
+ 0xFF81D4FA, // Shade200
+ 0xFF4FC3F7, // Shade300
+ 0xFF29B6F6, // Shade400
+ 0xFF03A9F4, // Shade500
+ 0xFF039BE5, // Shade600
+ 0xFF0288D1, // Shade700
+ 0xFF0277BD, // Shade800
+ 0xFF01579B, // Shade900
+ 0xFF80D8FF, // ShadeA100
+ 0xFF40C4FF, // ShadeA200
+ 0xFF00B0FF, // ShadeA400
+ 0xFF0091EA // ShadeA700
+ },
+ // Cyan
+ {
+ 0xFFE0F7FA, // Shade50
+ 0xFFB2EBF2, // Shade100
+ 0xFF80DEEA, // Shade200
+ 0xFF4DD0E1, // Shade300
+ 0xFF26C6DA, // Shade400
+ 0xFF00BCD4, // Shade500
+ 0xFF00ACC1, // Shade600
+ 0xFF0097A7, // Shade700
+ 0xFF00838F, // Shade800
+ 0xFF006064, // Shade900
+ 0xFF84FFFF, // ShadeA100
+ 0xFF18FFFF, // ShadeA200
+ 0xFF00E5FF, // ShadeA400
+ 0xFF00B8D4 // ShadeA700
+ },
+ // Teal
+ {
+ 0xFFE0F2F1, // Shade50
+ 0xFFB2DFDB, // Shade100
+ 0xFF80CBC4, // Shade200
+ 0xFF4DB6AC, // Shade300
+ 0xFF26A69A, // Shade400
+ 0xFF009688, // Shade500
+ 0xFF00897B, // Shade600
+ 0xFF00796B, // Shade700
+ 0xFF00695C, // Shade800
+ 0xFF004D40, // Shade900
+ 0xFFA7FFEB, // ShadeA100
+ 0xFF64FFDA, // ShadeA200
+ 0xFF1DE9B6, // ShadeA400
+ 0xFF00BFA5 // ShadeA700
+ },
+ // Green
+ {
+ 0xFFE8F5E9, // Shade50
+ 0xFFC8E6C9, // Shade100
+ 0xFFA5D6A7, // Shade200
+ 0xFF81C784, // Shade300
+ 0xFF66BB6A, // Shade400
+ 0xFF4CAF50, // Shade500
+ 0xFF43A047, // Shade600
+ 0xFF388E3C, // Shade700
+ 0xFF2E7D32, // Shade800
+ 0xFF1B5E20, // Shade900
+ 0xFFB9F6CA, // ShadeA100
+ 0xFF69F0AE, // ShadeA200
+ 0xFF00E676, // ShadeA400
+ 0xFF00C853 // ShadeA700
+ },
+ // LightGreen
+ {
+ 0xFFF1F8E9, // Shade50
+ 0xFFDCEDC8, // Shade100
+ 0xFFC5E1A5, // Shade200
+ 0xFFAED581, // Shade300
+ 0xFF9CCC65, // Shade400
+ 0xFF8BC34A, // Shade500
+ 0xFF7CB342, // Shade600
+ 0xFF689F38, // Shade700
+ 0xFF558B2F, // Shade800
+ 0xFF33691E, // Shade900
+ 0xFFCCFF90, // ShadeA100
+ 0xFFB2FF59, // ShadeA200
+ 0xFF76FF03, // ShadeA400
+ 0xFF64DD17 // ShadeA700
+ },
+ // Lime
+ {
+ 0xFFF9FBE7, // Shade50
+ 0xFFF0F4C3, // Shade100
+ 0xFFE6EE9C, // Shade200
+ 0xFFDCE775, // Shade300
+ 0xFFD4E157, // Shade400
+ 0xFFCDDC39, // Shade500
+ 0xFFC0CA33, // Shade600
+ 0xFFAFB42B, // Shade700
+ 0xFF9E9D24, // Shade800
+ 0xFF827717, // Shade900
+ 0xFFF4FF81, // ShadeA100
+ 0xFFEEFF41, // ShadeA200
+ 0xFFC6FF00, // ShadeA400
+ 0xFFAEEA00 // ShadeA700
+ },
+ // Yellow
+ {
+ 0xFFFFFDE7, // Shade50
+ 0xFFFFF9C4, // Shade100
+ 0xFFFFF59D, // Shade200
+ 0xFFFFF176, // Shade300
+ 0xFFFFEE58, // Shade400
+ 0xFFFFEB3B, // Shade500
+ 0xFFFDD835, // Shade600
+ 0xFFFBC02D, // Shade700
+ 0xFFF9A825, // Shade800
+ 0xFFF57F17, // Shade900
+ 0xFFFFFF8D, // ShadeA100
+ 0xFFFFFF00, // ShadeA200
+ 0xFFFFEA00, // ShadeA400
+ 0xFFFFD600 // ShadeA700
+ },
+ // Amber
+ {
+ 0xFFFFF8E1, // Shade50
+ 0xFFFFECB3, // Shade100
+ 0xFFFFE082, // Shade200
+ 0xFFFFD54F, // Shade300
+ 0xFFFFCA28, // Shade400
+ 0xFFFFC107, // Shade500
+ 0xFFFFB300, // Shade600
+ 0xFFFFA000, // Shade700
+ 0xFFFF8F00, // Shade800
+ 0xFFFF6F00, // Shade900
+ 0xFFFFE57F, // ShadeA100
+ 0xFFFFD740, // ShadeA200
+ 0xFFFFC400, // ShadeA400
+ 0xFFFFAB00 // ShadeA700
+ },
+ // Orange
+ {
+ 0xFFFFF3E0, // Shade50
+ 0xFFFFE0B2, // Shade100
+ 0xFFFFCC80, // Shade200
+ 0xFFFFB74D, // Shade300
+ 0xFFFFA726, // Shade400
+ 0xFFFF9800, // Shade500
+ 0xFFFB8C00, // Shade600
+ 0xFFF57C00, // Shade700
+ 0xFFEF6C00, // Shade800
+ 0xFFE65100, // Shade900
+ 0xFFFFD180, // ShadeA100
+ 0xFFFFAB40, // ShadeA200
+ 0xFFFF9100, // ShadeA400
+ 0xFFFF6D00 // ShadeA700
+ },
+ // DeepOrange
+ {
+ 0xFFFBE9E7, // Shade50
+ 0xFFFFCCBC, // Shade100
+ 0xFFFFAB91, // Shade200
+ 0xFFFF8A65, // Shade300
+ 0xFFFF7043, // Shade400
+ 0xFFFF5722, // Shade500
+ 0xFFF4511E, // Shade600
+ 0xFFE64A19, // Shade700
+ 0xFFD84315, // Shade800
+ 0xFFBF360C, // Shade900
+ 0xFFFF9E80, // ShadeA100
+ 0xFFFF6E40, // ShadeA200
+ 0xFFFF3D00, // ShadeA400
+ 0xFFDD2C00 // ShadeA700
+ },
+ // Brown
+ {
+ 0xFFEFEBE9, // Shade50
+ 0xFFD7CCC8, // Shade100
+ 0xFFBCAAA4, // Shade200
+ 0xFFA1887F, // Shade300
+ 0xFF8D6E63, // Shade400
+ 0xFF795548, // Shade500
+ 0xFF6D4C41, // Shade600
+ 0xFF5D4037, // Shade700
+ 0xFF4E342E, // Shade800
+ 0xFF3E2723, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
+ },
+ // Grey
+ {
+ 0xFFFAFAFA, // Shade50
+ 0xFFF5F5F5, // Shade100
+ 0xFFEEEEEE, // Shade200
+ 0xFFE0E0E0, // Shade300
+ 0xFFBDBDBD, // Shade400
+ 0xFF9E9E9E, // Shade500
+ 0xFF757575, // Shade600
+ 0xFF616161, // Shade700
+ 0xFF424242, // Shade800
+ 0xFF212121, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
+ },
+ // BlueGrey
+ {
+ 0xFFECEFF1, // Shade50
+ 0xFFCFD8DC, // Shade100
+ 0xFFB0BEC5, // Shade200
+ 0xFF90A4AE, // Shade300
+ 0xFF78909C, // Shade400
+ 0xFF607D8B, // Shade500
+ 0xFF546E7A, // Shade600
+ 0xFF455A64, // Shade700
+ 0xFF37474F, // Shade800
+ 0xFF263238, // Shade900
+ 0xFF000000, // ShadeA100
+ 0xFF000000, // ShadeA200
+ 0xFF000000, // ShadeA400
+ 0xFF000000 // ShadeA700
+ }
+};
+
+// If no value was inherited from a parent or explicitly set, the "global" values are used.
+// The initial, default values of the globals are hard-coded here, but the environment
+// variables and .conf file override them if specified.
+static QQuickMaterialStyle::Theme globalTheme = QQuickMaterialStyle::Light;
+static uint globalPrimary = QQuickMaterialStyle::Indigo;
+static uint globalAccent = QQuickMaterialStyle::Pink;
+static uint globalForeground = 0xDD000000; // primaryTextColorLight
+static uint globalBackground = 0xFFFAFAFA; // backgroundColorLight
+// These represent whether a global foreground/background was set.
+// Each style's m_hasForeground/m_hasBackground are initialized to these values.
+static bool hasGlobalForeground = false;
+static bool hasGlobalBackground = false;
+// These represent whether or not the global color value was specified as one of the
+// values that QColor accepts, as opposed to one of the pre-defined colors like Red.
+static bool globalPrimaryCustom = false;
+static bool globalAccentCustom = false;
+static bool globalForegroundCustom = true;
+static bool globalBackgroundCustom = true;
+// This is global because:
+// 1) The theme needs access to it to determine font sizes.
+// 2) There can only be one variant used for the whole application.
+static QQuickMaterialStyle::Variant globalVariant = QQuickMaterialStyle::Normal;
+
+static const QRgb backgroundColorLight = 0xFFFAFAFA;
+static const QRgb backgroundColorDark = 0xFF303030;
+static const QRgb dialogColorLight = 0xFFFFFFFF;
+static const QRgb dialogColorDark = 0xFF424242;
+static const QRgb primaryTextColorLight = 0xDD000000;
+static const QRgb primaryTextColorDark = 0xFFFFFFFF;
+static const QRgb secondaryTextColorLight = 0x89000000;
+static const QRgb secondaryTextColorDark = 0xB2FFFFFF;
+static const QRgb hintTextColorLight = 0x60000000;
+static const QRgb hintTextColorDark = 0x4CFFFFFF;
+static const QRgb dividerColorLight = 0x1E000000;
+static const QRgb dividerColorDark = 0x1EFFFFFF;
+static const QRgb iconColorLight = 0x89000000;
+static const QRgb iconColorDark = 0xFFFFFFFF;
+static const QRgb iconDisabledColorLight = 0x42000000;
+static const QRgb iconDisabledColorDark = 0x4CFFFFFF;
+static const QRgb raisedButtonColorLight = 0xFFD6D7D7;
+static const QRgb raisedButtonColorDark = 0x3FCCCCCC;
+static const QRgb raisedButtonDisabledColorLight = dividerColorLight;
+static const QRgb raisedButtonDisabledColorDark = dividerColorDark;
+static const QRgb frameColorLight = hintTextColorLight;
+static const QRgb frameColorDark = hintTextColorDark;
+static const QRgb switchUncheckedTrackColorLight = 0x42000000;
+static const QRgb switchUncheckedTrackColorDark = 0x4CFFFFFF;
+static const QRgb switchDisabledTrackColorLight = 0x1E000000;
+static const QRgb switchDisabledTrackColorDark = 0x19FFFFFF;
+static const QRgb rippleColorLight = 0x10000000;
+static const QRgb rippleColorDark = 0x20FFFFFF;
+static const QRgb spinBoxDisabledIconColorLight = 0xFFCCCCCC;
+static const QRgb spinBoxDisabledIconColorDark = 0xFF666666;
+static const QRgb sliderDisabledColorLight = 0xFF9E9E9E;
+static const QRgb sliderDisabledColorDark = 0xFF616161;
+
+static QQuickMaterialStyle::Theme effectiveTheme(QQuickMaterialStyle::Theme theme)
+{
+ if (theme == QQuickMaterialStyle::System)
+ theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickMaterialStyle::Dark : QQuickMaterialStyle::Light;
+ return theme;
+}
+
+QQuickMaterialStyle::QQuickMaterialStyle(QObject *parent) : QQuickAttachedPropertyPropagator(parent),
+ m_customPrimary(globalPrimaryCustom),
+ m_customAccent(globalAccentCustom),
+ m_customForeground(globalForegroundCustom),
+ m_customBackground(globalBackgroundCustom),
+ m_hasForeground(hasGlobalForeground),
+ m_hasBackground(hasGlobalBackground),
+ m_theme(globalTheme),
+ m_primary(globalPrimary),
+ m_accent(globalAccent),
+ m_foreground(globalForeground),
+ m_background(globalBackground)
+{
+ QQuickAttachedPropertyPropagator::initialize();
+}
+
+QQuickMaterialStyle *QQuickMaterialStyle::qmlAttachedProperties(QObject *object)
+{
+ return new QQuickMaterialStyle(object);
+}
+
+QQuickMaterialStyle::Theme QQuickMaterialStyle::theme() const
+{
+ return m_theme;
+}
+
+void QQuickMaterialStyle::setTheme(Theme theme)
+{
+ if (theme == System)
+ theme = QQuickStylePrivate::isDarkSystemTheme() ? Dark : Light;
+
+ m_explicitTheme = true;
+ if (m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ themeChange();
+ if (!m_customAccent)
+ accentChange();
+ if (!m_hasBackground)
+ backgroundChange();
+ if (!m_hasForeground)
+ foregroundChange();
+}
+
+void QQuickMaterialStyle::inheritTheme(Theme theme)
+{
+ if (m_explicitTheme || m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ themeChange();
+ if (!m_customAccent)
+ accentChange();
+ if (!m_hasBackground)
+ backgroundChange();
+ if (!m_hasForeground)
+ foregroundChange();
+}
+
+void QQuickMaterialStyle::propagateTheme()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
+ if (material)
+ material->inheritTheme(m_theme);
+ }
+}
+
+void QQuickMaterialStyle::resetTheme()
+{
+ if (!m_explicitTheme)
+ return;
+
+ m_explicitTheme = false;
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(attachedParent());
+ inheritTheme(material ? material->theme() : globalTheme);
+}
+
+void QQuickMaterialStyle::themeChange()
+{
+ emit themeChanged();
+ emit themeOrAccentChanged();
+ emit primaryHighlightedTextColor();
+ emit buttonColorChanged();
+ emit buttonDisabledColorChanged();
+ emit dialogColorChanged();
+ emit tooltipColorChanged();
+ emit toolBarColorChanged();
+ emit toolTextColorChanged();
+}
+
+QVariant QQuickMaterialStyle::primary() const
+{
+ return primaryColor();
+}
+
+void QQuickMaterialStyle::setPrimary(const QVariant &var)
+{
+ QRgb primary = 0;
+ bool custom = false;
+ if (!variantToRgba(var, "primary", &primary, &custom))
+ return;
+
+ m_explicitPrimary = true;
+ if (m_primary == primary)
+ return;
+
+ m_customPrimary = custom;
+ m_primary = primary;
+ propagatePrimary();
+ primaryChange();
+}
+
+void QQuickMaterialStyle::inheritPrimary(uint primary, bool custom)
+{
+ if (m_explicitPrimary || m_primary == primary)
+ return;
+
+ m_customPrimary = custom;
+ m_primary = primary;
+ propagatePrimary();
+ primaryChange();
+}
+
+void QQuickMaterialStyle::propagatePrimary()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
+ if (material)
+ material->inheritPrimary(m_primary, m_customPrimary);
+ }
+}
+
+void QQuickMaterialStyle::resetPrimary()
+{
+ if (!m_explicitPrimary)
+ return;
+
+ m_customPrimary = false;
+ m_explicitPrimary = false;
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(attachedParent());
+ if (material)
+ inheritPrimary(material->m_primary, material->m_customPrimary);
+ else
+ inheritPrimary(globalPrimary, false);
+}
+
+void QQuickMaterialStyle::primaryChange()
+{
+ emit primaryChanged();
+ emit toolBarColorChanged();
+ emit toolTextColorChanged();
+}
+
+QVariant QQuickMaterialStyle::accent() const
+{
+ return accentColor();
+}
+
+void QQuickMaterialStyle::setAccent(const QVariant &var)
+{
+ QRgb accent = 0;
+ bool custom = false;
+ if (!variantToRgba(var, "accent", &accent, &custom))
+ return;
+
+ m_explicitAccent = true;
+ if (m_accent == accent)
+ return;
+
+ m_customAccent = custom;
+ m_accent = accent;
+ propagateAccent();
+ accentChange();
+}
+
+void QQuickMaterialStyle::inheritAccent(uint accent, bool custom)
+{
+ if (m_explicitAccent || m_accent == accent)
+ return;
+
+ m_customAccent = custom;
+ m_accent = accent;
+ propagateAccent();
+ accentChange();
+}
+
+void QQuickMaterialStyle::propagateAccent()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
+ if (material)
+ material->inheritAccent(m_accent, m_customAccent);
+ }
+}
+
+void QQuickMaterialStyle::resetAccent()
+{
+ if (!m_explicitAccent)
+ return;
+
+ m_customAccent = false;
+ m_explicitAccent = false;
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(attachedParent());
+ if (material)
+ inheritAccent(material->m_accent, material->m_customAccent);
+ else
+ inheritAccent(globalAccent, false);
+}
+
+void QQuickMaterialStyle::accentChange()
+{
+ emit accentChanged();
+ emit themeOrAccentChanged();
+ emit buttonColorChanged();
+}
+
+QVariant QQuickMaterialStyle::foreground() const
+{
+ if (!m_hasForeground)
+ return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark);
+ if (m_customForeground)
+ return QColor::fromRgba(m_foreground);
+ if (m_foreground > BlueGrey)
+ return QColor();
+ return QColor::fromRgba(colors[m_foreground][Shade500]);
+}
+
+void QQuickMaterialStyle::setForeground(const QVariant &var)
+{
+ QRgb foreground = 0;
+ bool custom = false;
+ if (!variantToRgba(var, "foreground", &foreground, &custom))
+ return;
+
+ m_hasForeground = true;
+ m_explicitForeground = true;
+ if (m_foreground == foreground)
+ return;
+
+ m_customForeground = custom;
+ m_foreground = foreground;
+ propagateForeground();
+ foregroundChange();
+}
+
+void QQuickMaterialStyle::inheritForeground(uint foreground, bool custom, bool has)
+{
+ if (m_explicitForeground || m_foreground == foreground)
+ return;
+
+ m_hasForeground = has;
+ m_customForeground = custom;
+ m_foreground = foreground;
+ propagateForeground();
+ foregroundChange();
+}
+
+void QQuickMaterialStyle::propagateForeground()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
+ if (material)
+ material->inheritForeground(m_foreground, m_customForeground, m_hasForeground);
+ }
+}
+
+void QQuickMaterialStyle::resetForeground()
+{
+ if (!m_explicitForeground)
+ return;
+
+ m_hasForeground = false;
+ m_customForeground = false;
+ m_explicitForeground = false;
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(attachedParent());
+ inheritForeground(material ? material->m_foreground : globalForeground, true, material ? material->m_hasForeground : false);
+}
+
+void QQuickMaterialStyle::foregroundChange()
+{
+ emit foregroundChanged();
+ emit primaryHighlightedTextColorChanged();
+ // TODO: This causes a binding loop: see QTBUG-85699 and the comments on its fix
+// emit toolTextColorChanged();
+}
+
+QVariant QQuickMaterialStyle::background() const
+{
+ return backgroundColor();
+}
+
+void QQuickMaterialStyle::setBackground(const QVariant &var)
+{
+ QRgb background = 0;
+ bool custom = false;
+ if (!variantToRgba(var, "background", &background, &custom))
+ return;
+
+ m_hasBackground = true;
+ m_explicitBackground = true;
+ if (m_background == background)
+ return;
+
+ m_customBackground = custom;
+ m_background = background;
+ propagateBackground();
+ backgroundChange();
+}
+
+void QQuickMaterialStyle::inheritBackground(uint background, bool custom, bool has)
+{
+ if (m_explicitBackground || m_background == background)
+ return;
+
+ m_hasBackground = has;
+ m_customBackground = custom;
+ m_background = background;
+ propagateBackground();
+ backgroundChange();
+}
+
+void QQuickMaterialStyle::propagateBackground()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(child);
+ if (material)
+ material->inheritBackground(m_background, m_customBackground, m_hasBackground);
+ }
+}
+
+void QQuickMaterialStyle::resetBackground()
+{
+ if (!m_explicitBackground)
+ return;
+
+ m_hasBackground = false;
+ m_customBackground = false;
+ m_explicitBackground = false;
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(attachedParent());
+ inheritBackground(material ? material->m_background : globalBackground, true, material ? material->m_hasBackground : false);
+}
+
+void QQuickMaterialStyle::backgroundChange()
+{
+ emit backgroundChanged();
+ emit buttonColorChanged();
+ emit dialogColorChanged();
+ emit tooltipColorChanged();
+ emit toolBarColorChanged();
+}
+
+int QQuickMaterialStyle::elevation() const
+{
+ return m_elevation;
+}
+
+void QQuickMaterialStyle::setElevation(int elevation)
+{
+ if (m_elevation == elevation)
+ return;
+
+ m_elevation = elevation;
+ elevationChange();
+}
+
+void QQuickMaterialStyle::resetElevation()
+{
+ setElevation(0);
+}
+
+void QQuickMaterialStyle::elevationChange()
+{
+ emit elevationChanged();
+ emit buttonDisabledColorChanged();
+}
+
+QColor QQuickMaterialStyle::primaryColor() const
+{
+ if (m_customPrimary)
+ return QColor::fromRgba(m_primary);
+ if (m_primary > BlueGrey)
+ return QColor();
+ return colors[m_primary][Shade500];
+}
+
+QColor QQuickMaterialStyle::accentColor(Shade shade) const
+{
+ if (m_customAccent)
+ return shade == themeShade() ? QColor::fromRgba(m_accent)
+ : this->shade(QColor::fromRgba(m_accent), shade);
+ if (m_accent > BlueGrey)
+ return QColor();
+ return colors[m_accent][shade];
+}
+
+QColor QQuickMaterialStyle::accentColor() const
+{
+ return accentColor(themeShade());
+}
+
+QColor QQuickMaterialStyle::backgroundColor(Shade shade) const
+{
+ if (!m_hasBackground)
+ return QColor::fromRgba(m_theme == Light ? backgroundColorLight : backgroundColorDark);
+ if (m_customBackground)
+ return shade == themeShade() ? QColor::fromRgba(m_background)
+ : this->shade(QColor::fromRgba(m_background), shade);
+ if (m_background > BlueGrey)
+ return QColor();
+ return colors[m_background][shade];
+}
+
+QColor QQuickMaterialStyle::backgroundColor() const
+{
+ return backgroundColor(themeShade());
+}
+
+QColor QQuickMaterialStyle::primaryTextColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? primaryTextColorLight : primaryTextColorDark);
+}
+
+QColor QQuickMaterialStyle::primaryHighlightedTextColor() const
+{
+ if (m_explicitForeground)
+ return primaryTextColor();
+ return QColor::fromRgba(primaryTextColorDark);
+}
+
+QColor QQuickMaterialStyle::secondaryTextColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? secondaryTextColorLight : secondaryTextColorDark);
+}
+
+QColor QQuickMaterialStyle::hintTextColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? hintTextColorLight : hintTextColorDark);
+}
+
+QColor QQuickMaterialStyle::textSelectionColor() const
+{
+ QColor color = accentColor();
+ color.setAlphaF(0.4f);
+ return color;
+}
+
+QColor QQuickMaterialStyle::dropShadowColor() const
+{
+ return QColor::fromRgba(0x40000000);
+}
+
+QColor QQuickMaterialStyle::dividerColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? dividerColorLight : dividerColorDark);
+}
+
+QColor QQuickMaterialStyle::iconColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? iconColorLight : iconColorDark);
+}
+
+QColor QQuickMaterialStyle::iconDisabledColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? iconDisabledColorLight : iconDisabledColorDark);
+}
+
+QColor QQuickMaterialStyle::buttonColor(bool highlighted, bool checked) const
+{
+ Shade shade = themeShade();
+
+ QColor color = Qt::transparent;
+
+ if (m_explicitBackground) {
+ color = backgroundColor(shade);
+ } else if (highlighted) {
+ if (m_theme == Light) {
+ color = accentColor(shade);
+ if (checked)
+ color = color.lighter();
+ } else {
+ // A highlighted + checked button should become darker.
+ color = accentColor(checked ? Shade100 : shade);
+ }
+ } else if (elevation() > 0) {
+ color = QColor::fromRgba(m_theme == Light ? raisedButtonColorLight
+ : raisedButtonColorDark);
+ }
+
+ return color;
+}
+
+QColor QQuickMaterialStyle::buttonColor() const
+{
+ return buttonColor(false);
+}
+
+QColor QQuickMaterialStyle::buttonDisabledColor() const
+{
+ if (elevation() > 0) {
+ return QColor::fromRgba(m_theme == Light ? raisedButtonDisabledColorLight
+ : raisedButtonDisabledColorDark);
+ } else {
+ return Qt::transparent;
+ }
+}
+
+QColor QQuickMaterialStyle::highlightedButtonColor() const
+{
+ return buttonColor(true);
+}
+
+QColor QQuickMaterialStyle::highlightedCheckedButtonColor() const
+{
+ return buttonColor(true, true);
+}
+
+QColor QQuickMaterialStyle::frameColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? frameColorLight : frameColorDark);
+}
+
+QColor QQuickMaterialStyle::rippleColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? rippleColorLight : rippleColorDark);
+}
+
+QColor QQuickMaterialStyle::highlightedRippleColor() const
+{
+ QColor pressColor = accentColor();
+ pressColor.setAlpha(m_theme == Light ? 30 : 50);
+ return pressColor;
+}
+
+QColor QQuickMaterialStyle::switchUncheckedTrackColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? switchUncheckedTrackColorLight : switchUncheckedTrackColorDark);
+}
+
+QColor QQuickMaterialStyle::switchCheckedTrackColor() const
+{
+ QColor trackColor(accentColor());
+ trackColor.setAlphaF(0.5);
+ return trackColor;
+}
+
+QColor QQuickMaterialStyle::switchUncheckedHandleColor() const
+{
+ return m_theme == Light ? color(Grey, Shade50) : color(Grey, Shade400);
+}
+
+QColor QQuickMaterialStyle::switchCheckedHandleColor() const
+{
+ return m_theme == Light ? accentColor() : shade(accentColor(), Shade200);
+}
+
+QColor QQuickMaterialStyle::switchDisabledTrackColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? switchDisabledTrackColorLight : switchDisabledTrackColorDark);
+}
+
+QColor QQuickMaterialStyle::switchDisabledHandleColor() const
+{
+ return m_theme == Light ? color(Grey, Shade400) : color(Grey, Shade800);
+}
+
+QColor QQuickMaterialStyle::scrollBarColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? 0x40000000 : 0x40FFFFFF);
+}
+
+QColor QQuickMaterialStyle::scrollBarHoveredColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? 0x60000000 : 0x60FFFFFF);
+}
+
+QColor QQuickMaterialStyle::scrollBarPressedColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? 0x80000000 : 0x80FFFFFF);
+}
+
+QColor QQuickMaterialStyle::dialogColor() const
+{
+ if (m_hasBackground)
+ return backgroundColor();
+ return QColor::fromRgba(m_theme == Light ? dialogColorLight : dialogColorDark);
+}
+
+QColor QQuickMaterialStyle::backgroundDimColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? 0x99303030 : 0x99fafafa);
+}
+
+QColor QQuickMaterialStyle::listHighlightColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? 0x1e000000 : 0x1effffff);
+}
+
+QColor QQuickMaterialStyle::tooltipColor() const
+{
+ if (m_explicitBackground)
+ return backgroundColor();
+ return color(Grey, Shade700);
+}
+
+QColor QQuickMaterialStyle::toolBarColor() const
+{
+ if (m_explicitBackground)
+ return backgroundColor();
+ return primaryColor();
+}
+
+QColor QQuickMaterialStyle::toolTextColor() const
+{
+ if (m_hasForeground || m_customPrimary)
+ return primaryTextColor();
+
+ switch (m_primary) {
+ case Red:
+ case Pink:
+ case Purple:
+ case DeepPurple:
+ case Indigo:
+ case Blue:
+ case Teal:
+ case DeepOrange:
+ case Brown:
+ case BlueGrey:
+ return QColor::fromRgba(primaryTextColorDark);
+
+ case LightBlue:
+ case Cyan:
+ case Green:
+ case LightGreen:
+ case Lime:
+ case Yellow:
+ case Amber:
+ case Orange:
+ case Grey:
+ return QColor::fromRgba(primaryTextColorLight);
+
+ default:
+ break;
+ }
+
+ return primaryTextColor();
+}
+
+QColor QQuickMaterialStyle::spinBoxDisabledIconColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? spinBoxDisabledIconColorLight : spinBoxDisabledIconColorDark);
+}
+
+QColor QQuickMaterialStyle::sliderDisabledColor() const
+{
+ return QColor::fromRgba(m_theme == Light ? sliderDisabledColorLight : sliderDisabledColorDark);
+}
+
+QColor QQuickMaterialStyle::color(QQuickMaterialStyle::Color color, QQuickMaterialStyle::Shade shade) const
+{
+ int count = sizeof(colors) / sizeof(colors[0]);
+ if (color < 0 || color >= count)
+ return QColor();
+
+ count = sizeof(colors[0]) / sizeof(colors[0][0]);
+ if (shade < 0 || shade >= count)
+ return QColor();
+
+ return colors[color][shade];
+}
+
+static QColor lighterShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() + amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+static QColor darkerShade(const QColor &color, qreal amount)
+{
+ QColor hsl = color.toHsl();
+ hsl.setHslF(hsl.hueF(), hsl.saturationF(), qBound<qreal>(0.0, hsl.lightnessF() - amount, 1.0), color.alphaF());
+ return hsl.convertTo(color.spec());
+}
+
+QQuickMaterialStyle::Shade QQuickMaterialStyle::themeShade() const
+{
+ return m_theme == Light ? Shade500 : Shade200;
+}
+
+/*
+ * The following lightness values originate from the Material Design Color Generator project.
+ *
+ * The MIT License (MIT)
+ *
+ * Copyright (c) 2015 mbitson
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+// Returns the same color, if shade == themeShade()
+QColor QQuickMaterialStyle::shade(const QColor &color, Shade shade) const
+{
+ switch (shade) {
+ case Shade50:
+ return lighterShade(color, m_theme == Light ? 0.52 : 0.26);
+ case Shade100:
+ return lighterShade(color, m_theme == Light ? 0.37 : 0.11);
+ case Shade200:
+ return m_theme == Light ? lighterShade(color, 0.26) : color;
+ case Shade300:
+ return m_theme == Light ? lighterShade(color, 0.12) : darkerShade(color, 0.14);
+ case Shade400:
+ return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20);
+ case Shade500:
+ return m_theme == Light ? color : darkerShade(color, 0.26);
+ case Shade600:
+ return darkerShade(color, m_theme == Light ? 0.06 : 0.32);
+ case Shade700:
+ return darkerShade(color, m_theme == Light ? 0.12 : 0.38);
+ case Shade800:
+ return darkerShade(color, m_theme == Light ? 0.18 : 0.44);
+ case Shade900:
+ return darkerShade(color, m_theme == Light ? 0.24 : 0.50);
+ case ShadeA100:
+ return lighterShade(color, m_theme == Light ? 0.54 : 0.28);
+ case ShadeA200:
+ return lighterShade(color, m_theme == Light ? 0.37 : 0.11);
+ case ShadeA400:
+ return m_theme == Light ? lighterShade(color, 0.06) : darkerShade(color, 0.20);
+ case ShadeA700:
+ return darkerShade(color, m_theme == Light ? 0.12 : 0.38);
+ default:
+ Q_UNREACHABLE_RETURN(QColor());
+ }
+}
+
+int QQuickMaterialStyle::touchTarget() const
+{
+ // https://material.io/guidelines/components/buttons.html#buttons-style
+ return globalVariant == Dense ? 44 : 48;
+}
+
+int QQuickMaterialStyle::buttonHeight() const
+{
+ // https://material.io/guidelines/components/buttons.html#buttons-style
+ return globalVariant == Dense ? 32 : 36;
+}
+
+int QQuickMaterialStyle::delegateHeight() const
+{
+ // https://material.io/guidelines/components/lists.html#lists-specs
+ return globalVariant == Dense ? 40 : 48;
+}
+
+int QQuickMaterialStyle::dialogButtonBoxHeight() const
+{
+ return globalVariant == Dense ? 48 : 52;
+}
+
+int QQuickMaterialStyle::frameVerticalPadding() const
+{
+ return globalVariant == Dense ? 8 : 12;
+}
+
+int QQuickMaterialStyle::menuItemHeight() const
+{
+ // https://material.io/guidelines/components/menus.html#menus-simple-menus
+ return globalVariant == Dense ? 32 : 48;
+}
+
+int QQuickMaterialStyle::menuItemVerticalPadding() const
+{
+ return globalVariant == Dense ? 8 : 12;
+}
+
+int QQuickMaterialStyle::switchDelegateVerticalPadding() const
+{
+ // SwitchDelegate's indicator is much larger than the others due to the shadow,
+ // so we must reduce its padding to ensure its implicitHeight is 40 when dense.
+ return globalVariant == Dense ? 4 : 8;
+}
+
+int QQuickMaterialStyle::tooltipHeight() const
+{
+ // https://material.io/guidelines/components/tooltips.html
+ return globalVariant == Dense ? 22 : 32;
+}
+
+QQuickMaterialStyle::Variant QQuickMaterialStyle::variant()
+{
+ return globalVariant;
+}
+
+template <typename Enum>
+static Enum toEnumValue(const QByteArray &value, bool *ok)
+{
+ QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ return static_cast<Enum>(enumeration.keyToValue(value, ok));
+}
+
+static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer<QSettings> &settings, const QString &name)
+{
+ QByteArray value = qgetenv(env);
+#if QT_CONFIG(settings)
+ if (value.isNull() && !settings.isNull())
+ value = settings->value(name).toByteArray();
+#endif
+ return value;
+}
+
+void QQuickMaterialStyle::initGlobals()
+{
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(QStringLiteral("Material"));
+
+ bool ok = false;
+ QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_THEME", settings, QStringLiteral("Theme"));
+ Theme themeEnum = toEnumValue<Theme>(themeValue, &ok);
+ if (ok)
+ globalTheme = effectiveTheme(themeEnum);
+ else if (!themeValue.isEmpty())
+ qWarning().nospace().noquote() << "Material: unknown theme value: " << themeValue;
+
+ QByteArray variantValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_VARIANT", settings, QStringLiteral("Variant"));
+ Variant variantEnum = toEnumValue<Variant>(variantValue, &ok);
+ if (ok)
+ globalVariant = variantEnum;
+ else if (!variantValue.isEmpty())
+ qWarning().nospace().noquote() << "Material: unknown variant value: " << variantValue;
+
+ QByteArray primaryValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_PRIMARY", settings, QStringLiteral("Primary"));
+ Color primaryEnum = toEnumValue<Color>(primaryValue, &ok);
+ if (ok) {
+ globalPrimaryCustom = false;
+ globalPrimary = primaryEnum;
+ } else {
+ QColor color = QColor::fromString(primaryValue);
+ if (color.isValid()) {
+ globalPrimaryCustom = true;
+ globalPrimary = color.rgba();
+ } else if (!primaryValue.isEmpty()) {
+ qWarning().nospace().noquote() << "Material: unknown primary value: " << primaryValue;
+ }
+ }
+
+ QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_ACCENT", settings, QStringLiteral("Accent"));
+ Color accentEnum = toEnumValue<Color>(accentValue, &ok);
+ if (ok) {
+ globalAccentCustom = false;
+ globalAccent = accentEnum;
+ } else if (!accentValue.isEmpty()) {
+ QColor color = QColor::fromString(accentValue);
+ if (color.isValid()) {
+ globalAccentCustom = true;
+ globalAccent = color.rgba();
+ } else {
+ qWarning().nospace().noquote() << "Material: unknown accent value: " << accentValue;
+ }
+ }
+
+ QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_FOREGROUND", settings, QStringLiteral("Foreground"));
+ Color foregroundEnum = toEnumValue<Color>(foregroundValue, &ok);
+ if (ok) {
+ globalForegroundCustom = false;
+ globalForeground = foregroundEnum;
+ hasGlobalForeground = true;
+ } else if (!foregroundValue.isEmpty()) {
+ QColor color = QColor::fromString(foregroundValue);
+ if (color.isValid()) {
+ globalForegroundCustom = true;
+ globalForeground = color.rgba();
+ hasGlobalForeground = true;
+ } else {
+ qWarning().nospace().noquote() << "Material: unknown foreground value: " << foregroundValue;
+ }
+ }
+
+ QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_MATERIAL_BACKGROUND", settings, QStringLiteral("Background"));
+ Color backgroundEnum = toEnumValue<Color>(backgroundValue, &ok);
+ if (ok) {
+ globalBackgroundCustom = false;
+ globalBackground = backgroundEnum;
+ hasGlobalBackground = true;
+ } else if (!backgroundValue.isEmpty()) {
+ QColor color = QColor::fromString(backgroundValue);
+ if (color.isValid()) {
+ globalBackgroundCustom = true;
+ globalBackground = color.rgba();
+ hasGlobalBackground = true;
+ } else {
+ qWarning().nospace().noquote() << "Material: unknown background value: " << backgroundValue;
+ }
+ }
+}
+
+void QQuickMaterialStyle::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
+{
+ Q_UNUSED(oldParent);
+ QQuickMaterialStyle *material = qobject_cast<QQuickMaterialStyle *>(newParent);
+ if (material) {
+ inheritPrimary(material->m_primary, material->m_customPrimary);
+ inheritAccent(material->m_accent, material->m_customAccent);
+ inheritForeground(material->m_foreground, material->m_customForeground, material->m_hasForeground);
+ inheritBackground(material->m_background, material->m_customBackground, material->m_hasBackground);
+ inheritTheme(material->theme());
+ }
+}
+
+bool QQuickMaterialStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const
+{
+ *custom = false;
+ if (var.metaType().id() == QMetaType::Int) {
+ int val = var.toInt();
+ if (val > BlueGrey) {
+ qmlWarning(parent()) << "unknown Material." << name << " value: " << val;
+ return false;
+ }
+ *rgba = val;
+ } else {
+ int val = QMetaEnum::fromType<Color>().keyToValue(var.toByteArray());
+ if (val != -1) {
+ *rgba = val;
+ } else {
+ QColor color = QColor::fromString(var.toString());
+ if (!color.isValid()) {
+ qmlWarning(parent()) << "unknown Material." << name << " value: " << var.toString();
+ return false;
+ }
+ *custom = true;
+ *rgba = color.rgba();
+ }
+ }
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickmaterialstyle_p.cpp"
diff --git a/src/quickcontrols/material/qquickmaterialstyle_p.h b/src/quickcontrols/material/qquickmaterialstyle_p.h
new file mode 100644
index 0000000000..99344a6192
--- /dev/null
+++ b/src/quickcontrols/material/qquickmaterialstyle_p.h
@@ -0,0 +1,302 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKMATERIALSTYLE_P_H
+#define QQUICKMATERIALSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/qquickattachedpropertypropagator.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickMaterialStyle : public QQuickAttachedPropertyPropagator
+{
+ Q_OBJECT
+ Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QVariant primary READ primary WRITE setPrimary RESET resetPrimary NOTIFY primaryChanged FINAL)
+ Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL)
+ Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL)
+ Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL)
+ Q_PROPERTY(int elevation READ elevation WRITE setElevation RESET resetElevation NOTIFY elevationChanged FINAL)
+
+ Q_PROPERTY(QColor primaryColor READ primaryColor NOTIFY primaryChanged FINAL) // TODO: remove?
+ Q_PROPERTY(QColor accentColor READ accentColor NOTIFY accentChanged FINAL) // TODO: remove?
+ Q_PROPERTY(QColor backgroundColor READ backgroundColor NOTIFY backgroundChanged FINAL)
+ Q_PROPERTY(QColor primaryTextColor READ primaryTextColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor primaryHighlightedTextColor READ primaryHighlightedTextColor NOTIFY primaryHighlightedTextColorChanged FINAL)
+ Q_PROPERTY(QColor secondaryTextColor READ secondaryTextColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor hintTextColor READ hintTextColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor textSelectionColor READ textSelectionColor NOTIFY themeOrAccentChanged FINAL)
+ Q_PROPERTY(QColor dropShadowColor READ dropShadowColor CONSTANT FINAL)
+ Q_PROPERTY(QColor dividerColor READ dividerColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor iconColor READ iconColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor iconDisabledColor READ iconDisabledColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor buttonColor READ buttonColor NOTIFY buttonColorChanged FINAL)
+ Q_PROPERTY(QColor buttonDisabledColor READ buttonDisabledColor NOTIFY buttonDisabledColorChanged FINAL)
+ Q_PROPERTY(QColor highlightedButtonColor READ highlightedButtonColor NOTIFY buttonColorChanged FINAL)
+ Q_PROPERTY(QColor highlightedCheckedButtonColor READ highlightedCheckedButtonColor NOTIFY buttonColorChanged FINAL REVISION(6, 2))
+ Q_PROPERTY(QColor frameColor READ frameColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor rippleColor READ rippleColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor highlightedRippleColor READ highlightedRippleColor NOTIFY themeOrAccentChanged FINAL)
+ Q_PROPERTY(QColor switchUncheckedTrackColor READ switchUncheckedTrackColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor switchCheckedTrackColor READ switchCheckedTrackColor NOTIFY themeOrAccentChanged FINAL)
+ Q_PROPERTY(QColor switchUncheckedHandleColor READ switchUncheckedHandleColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor switchCheckedHandleColor READ switchCheckedHandleColor NOTIFY themeOrAccentChanged FINAL)
+ Q_PROPERTY(QColor switchDisabledTrackColor READ switchDisabledTrackColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor switchDisabledHandleColor READ switchDisabledHandleColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor scrollBarColor READ scrollBarColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor scrollBarHoveredColor READ scrollBarHoveredColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor scrollBarPressedColor READ scrollBarPressedColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor dialogColor READ dialogColor NOTIFY dialogColorChanged FINAL)
+ Q_PROPERTY(QColor backgroundDimColor READ backgroundDimColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor listHighlightColor READ listHighlightColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor tooltipColor READ tooltipColor NOTIFY tooltipColorChanged FINAL)
+ Q_PROPERTY(QColor toolBarColor READ toolBarColor NOTIFY toolBarColorChanged FINAL)
+ Q_PROPERTY(QColor toolTextColor READ toolTextColor NOTIFY toolTextColorChanged FINAL)
+ Q_PROPERTY(QColor spinBoxDisabledIconColor READ spinBoxDisabledIconColor NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QColor sliderDisabledColor READ sliderDisabledColor NOTIFY themeChanged FINAL REVISION(2, 15))
+
+ Q_PROPERTY(int touchTarget READ touchTarget CONSTANT FINAL)
+ Q_PROPERTY(int buttonHeight READ buttonHeight CONSTANT FINAL)
+ Q_PROPERTY(int delegateHeight READ delegateHeight CONSTANT FINAL)
+ Q_PROPERTY(int dialogButtonBoxHeight READ dialogButtonBoxHeight CONSTANT FINAL)
+ Q_PROPERTY(int frameVerticalPadding READ frameVerticalPadding CONSTANT FINAL)
+ Q_PROPERTY(int menuItemHeight READ menuItemHeight CONSTANT FINAL)
+ Q_PROPERTY(int menuItemVerticalPadding READ menuItemVerticalPadding CONSTANT FINAL)
+ Q_PROPERTY(int switchDelegateVerticalPadding READ switchDelegateVerticalPadding CONSTANT FINAL)
+ Q_PROPERTY(int tooltipHeight READ tooltipHeight CONSTANT FINAL)
+
+ QML_NAMED_ELEMENT(Material)
+ QML_ATTACHED(QQuickMaterialStyle)
+ QML_UNCREATABLE("")
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ enum Theme {
+ Light,
+ Dark,
+ System
+ };
+
+ enum Variant {
+ Normal,
+ Dense
+ };
+
+ enum Color {
+ Red,
+ Pink,
+ Purple,
+ DeepPurple,
+ Indigo,
+ Blue,
+ LightBlue,
+ Cyan,
+ Teal,
+ Green,
+ LightGreen,
+ Lime,
+ Yellow,
+ Amber,
+ Orange,
+ DeepOrange,
+ Brown,
+ Grey,
+ BlueGrey
+ };
+
+ enum Shade {
+ Shade50,
+ Shade100,
+ Shade200,
+ Shade300,
+ Shade400,
+ Shade500,
+ Shade600,
+ Shade700,
+ Shade800,
+ Shade900,
+ ShadeA100,
+ ShadeA200,
+ ShadeA400,
+ ShadeA700,
+ };
+
+ Q_ENUM(Theme)
+ Q_ENUM(Variant)
+ Q_ENUM(Color)
+ Q_ENUM(Shade)
+
+ explicit QQuickMaterialStyle(QObject *parent = nullptr);
+
+ static QQuickMaterialStyle *qmlAttachedProperties(QObject *object);
+
+ Theme theme() const;
+ void setTheme(Theme theme);
+ void inheritTheme(Theme theme);
+ void propagateTheme();
+ void resetTheme();
+ void themeChange();
+
+ QVariant primary() const;
+ void setPrimary(const QVariant &accent);
+ void inheritPrimary(uint primary, bool custom);
+ void propagatePrimary();
+ void resetPrimary();
+ void primaryChange();
+
+ QVariant accent() const;
+ void setAccent(const QVariant &accent);
+ void inheritAccent(uint accent, bool custom);
+ void propagateAccent();
+ void resetAccent();
+ void accentChange();
+
+ QVariant foreground() const;
+ void setForeground(const QVariant &foreground);
+ void inheritForeground(uint foreground, bool custom, bool has);
+ void propagateForeground();
+ void resetForeground();
+ void foregroundChange();
+
+ QVariant background() const;
+ void setBackground(const QVariant &background);
+ void inheritBackground(uint background, bool custom, bool has);
+ void propagateBackground();
+ void resetBackground();
+ void backgroundChange();
+
+ int elevation() const;
+ void setElevation(int elevation);
+ void resetElevation();
+ void elevationChange();
+
+ QColor primaryColor() const;
+ QColor accentColor() const;
+ QColor backgroundColor() const;
+ QColor primaryTextColor() const;
+ QColor primaryHighlightedTextColor() const;
+ QColor secondaryTextColor() const;
+ QColor hintTextColor() const;
+ QColor textSelectionColor() const;
+ QColor dropShadowColor() const;
+ QColor dividerColor() const;
+ QColor iconColor() const;
+ QColor iconDisabledColor() const;
+ QColor buttonColor() const;
+ QColor buttonDisabledColor() const;
+ QColor highlightedButtonColor() const;
+ QColor highlightedCheckedButtonColor() const;
+ QColor highlightedButtonDisabledColor() const;
+ QColor frameColor() const;
+ QColor rippleColor() const;
+ QColor highlightedRippleColor() const;
+ QColor switchUncheckedTrackColor() const;
+ QColor switchCheckedTrackColor() const;
+ QColor switchUncheckedHandleColor() const;
+ QColor switchCheckedHandleColor() const;
+ QColor switchDisabledTrackColor() const;
+ QColor switchDisabledHandleColor() const;
+ QColor scrollBarColor() const;
+ QColor scrollBarHoveredColor() const;
+ QColor scrollBarPressedColor() const;
+ QColor dialogColor() const;
+ QColor backgroundDimColor() const;
+ QColor listHighlightColor() const;
+ QColor tooltipColor() const;
+ QColor toolBarColor() const;
+ QColor toolTextColor() const;
+ QColor spinBoxDisabledIconColor() const;
+ QColor sliderDisabledColor() const;
+
+ Q_INVOKABLE QColor color(Color color, Shade shade = Shade500) const;
+ Q_INVOKABLE QColor shade(const QColor &color, Shade shade) const;
+
+ int touchTarget() const;
+ int buttonHeight() const;
+ int delegateHeight() const;
+ int dialogButtonBoxHeight() const;
+ int frameVerticalPadding() const;
+ int menuItemHeight() const;
+ int menuItemVerticalPadding() const;
+ int switchDelegateVerticalPadding() const;
+ int tooltipHeight() const;
+
+ static void initGlobals();
+
+ static Variant variant();
+
+Q_SIGNALS:
+ void themeChanged();
+ void primaryChanged();
+ void accentChanged();
+ void foregroundChanged();
+ void backgroundChanged();
+ void elevationChanged();
+
+ void themeOrAccentChanged();
+
+ void primaryHighlightedTextColorChanged();
+ void buttonColorChanged();
+ void buttonDisabledColorChanged();
+ void dialogColorChanged();
+ void tooltipColorChanged();
+ void toolBarColorChanged();
+ void toolTextColorChanged();
+
+protected:
+ void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) override;
+
+private:
+ void init();
+ bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba, bool *custom) const;
+
+ QColor backgroundColor(Shade shade) const;
+ QColor accentColor(Shade shade) const;
+ QColor buttonColor(bool highlighted, bool checked = false) const;
+ Shade themeShade() const;
+
+ // These reflect whether a color value was explicitly set on the specific
+ // item that this attached style object represents.
+ bool m_explicitTheme = false;
+ bool m_explicitPrimary = false;
+ bool m_explicitAccent = false;
+ bool m_explicitForeground = false;
+ bool m_explicitBackground = false;
+ // These reflect whether the color value that was either inherited or
+ // explicitly set is in the form that QColor expects, rather than one of
+ // our pre-defined color enum values.
+ bool m_customPrimary = false;
+ bool m_customAccent = false;
+ bool m_customForeground = false;
+ bool m_customBackground = false;
+ // These will be true when this item has an explicit or inherited foreground/background
+ // color, or these colors were declared globally via settings (e.g. conf or env vars).
+ // Some color properties of the style will return different values depending on whether
+ // or not these are set.
+ bool m_hasForeground = false;
+ bool m_hasBackground = false;
+ // The actual values for this item, whether explicit, inherited or globally set.
+ Theme m_theme = Light;
+ uint m_primary = 0;
+ uint m_accent = 0;
+ uint m_foreground = 0;
+ uint m_background = 0;
+ int m_elevation = 0;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKMATERIALSTYLE_P_H
diff --git a/src/quickcontrols/material/qquickmaterialtheme.cpp b/src/quickcontrols/material/qquickmaterialtheme.cpp
new file mode 100644
index 0000000000..629c389be5
--- /dev/null
+++ b/src/quickcontrols/material/qquickmaterialtheme.cpp
@@ -0,0 +1,80 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialtheme_p.h"
+#include "qquickmaterialstyle_p.h"
+
+#include <QtGui/qpa/qplatformdialoghelper.h>
+#include <QtGui/qfont.h>
+#include <QtGui/qfontinfo.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QQuickMaterialTheme::initialize(QQuickTheme *theme)
+{
+ QFont systemFont;
+ QFont buttonFont;
+ QFont toolTipFont;
+ QFont itemViewFont;
+ QFont listViewFont;
+ QFont menuItemFont;
+ QFont editorFont;
+
+ QFont font;
+ font.setFamilies(QStringList{QLatin1String("Roboto")});
+ QString family = QFontInfo(font).family();
+
+ if (family != QLatin1String("Roboto")) {
+ font.setFamilies(QStringList{QLatin1String("Noto")});
+ family = QFontInfo(font).family();
+ }
+
+ if (family == QLatin1String("Roboto") || family == QLatin1String("Noto")) {
+ const QStringList families{family};
+ systemFont.setFamilies(families);
+ buttonFont.setFamilies(families);
+ toolTipFont.setFamilies(families);
+ itemViewFont.setFamilies(families);
+ listViewFont.setFamilies(families);
+ menuItemFont.setFamilies(families);
+ editorFont.setFamilies(families);
+ }
+
+ const bool dense = QQuickMaterialStyle::variant() == QQuickMaterialStyle::Dense;
+ systemFont.setPixelSize(dense ? 13 : 14);
+ theme->setFont(QQuickTheme::System, systemFont);
+
+ // https://material.io/guidelines/components/buttons.html#buttons-style
+ buttonFont.setPixelSize(dense ? 13 : 14);
+ buttonFont.setCapitalization(QFont::AllUppercase);
+ buttonFont.setWeight(QFont::Medium);
+ theme->setFont(QQuickTheme::Button, buttonFont);
+ theme->setFont(QQuickTheme::TabBar, buttonFont);
+ theme->setFont(QQuickTheme::ToolBar, buttonFont);
+
+ // https://material.io/guidelines/components/tooltips.html
+ toolTipFont.setPixelSize(dense ? 10 : 14);
+ toolTipFont.setWeight(QFont::Medium);
+ theme->setFont(QQuickTheme::ToolTip, toolTipFont);
+
+ itemViewFont.setPixelSize(dense ? 13 : 14);
+ itemViewFont.setWeight(QFont::Medium);
+ theme->setFont(QQuickTheme::ItemView, itemViewFont);
+
+ // https://material.io/guidelines/components/lists.html#lists-specs
+ listViewFont.setPixelSize(dense ? 13 : 16);
+ theme->setFont(QQuickTheme::ListView, listViewFont);
+
+ menuItemFont.setPixelSize(dense ? 13 : 16);
+ theme->setFont(QQuickTheme::Menu, menuItemFont);
+ theme->setFont(QQuickTheme::MenuBar, menuItemFont);
+ theme->setFont(QQuickTheme::ComboBox, menuItemFont);
+
+ editorFont.setPixelSize(dense ? 13 : 16);
+ theme->setFont(QQuickTheme::TextArea, editorFont);
+ theme->setFont(QQuickTheme::TextField, editorFont);
+ theme->setFont(QQuickTheme::SpinBox, editorFont);
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/material/qquickmaterialtheme_p.h b/src/quickcontrols/material/qquickmaterialtheme_p.h
new file mode 100644
index 0000000000..893f441c86
--- /dev/null
+++ b/src/quickcontrols/material/qquickmaterialtheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKMATERIALTHEME_P_H
+#define QQUICKMATERIALTHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickMaterialTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKMATERIALTHEME_P_H
diff --git a/src/quickcontrols/material/qt_attribution.json b/src/quickcontrols/material/qt_attribution.json
new file mode 100644
index 0000000000..85fdadf9e0
--- /dev/null
+++ b/src/quickcontrols/material/qt_attribution.json
@@ -0,0 +1,13 @@
+{
+ "Id": "shadow_angular_material",
+ "Name": "Shadow values from Angular Material",
+ "QDocModule": "qtquickcontrols",
+ "QtUsage": "Used in the Material Style of Qt Quick Controls 2.",
+ "Files": "ElevationEffect.qml",
+ "Description": "Shadow values for the elevation effect.",
+ "Homepage": "https://angularjs.org/",
+ "License": "MIT License",
+ "LicenseId": "MIT",
+ "LicenseFile": "LICENSE_ANGULARJS.txt",
+ "Copyright": "Copyright (c) 2014-2016 Google, Inc"
+}
diff --git a/src/quickcontrols/material/qtquickcontrols2materialstyleplugin.cpp b/src/quickcontrols/material/qtquickcontrols2materialstyleplugin.cpp
new file mode 100644
index 0000000000..10aa64b8cf
--- /dev/null
+++ b/src/quickcontrols/material/qtquickcontrols2materialstyleplugin.cpp
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickmaterialstyle_p.h"
+#include "qquickmaterialtheme_p.h"
+
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickControls2Impl/private/qquickpaddedrectangle_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Material();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Material);
+
+class QtQuickControls2MaterialStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2MaterialStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+
+ QQuickMaterialTheme theme;
+};
+
+QtQuickControls2MaterialStylePlugin::QtQuickControls2MaterialStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Material;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2MaterialStylePlugin::name() const
+{
+ return QStringLiteral("Material");
+}
+
+void QtQuickControls2MaterialStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ QQuickMaterialStyle::initGlobals();
+ this->theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2materialstyleplugin.moc"
diff --git a/src/quickcontrols/material/shaders/+glslcore/RectangularGlow.frag b/src/quickcontrols/material/shaders/+glslcore/RectangularGlow.frag
new file mode 100644
index 0000000000..432d86b5d5
--- /dev/null
+++ b/src/quickcontrols/material/shaders/+glslcore/RectangularGlow.frag
@@ -0,0 +1,25 @@
+#version 150
+
+uniform float qt_Opacity;
+uniform float relativeSizeX;
+uniform float relativeSizeY;
+uniform float spread;
+uniform vec4 color;
+
+in vec2 qt_TexCoord0;
+out vec4 fragColor;
+
+float linearstep(float e0, float e1, float x)
+{
+ return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main()
+{
+ float alpha =
+ smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
+ smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
+
+ float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
+ fragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/quickcontrols/material/shaders/+hlsl/RectangularGlow.frag b/src/quickcontrols/material/shaders/+hlsl/RectangularGlow.frag
new file mode 100644
index 0000000000..69d9f852fb
--- /dev/null
+++ b/src/quickcontrols/material/shaders/+hlsl/RectangularGlow.frag
@@ -0,0 +1,21 @@
+cbuffer ConstantBuffer : register(b0)
+{
+ float4x4 qt_Matrix;
+ float qt_Opacity;
+ float relativeSizeX;
+ float relativeSizeY;
+ float spread;
+ float4 color;
+}
+
+float linearstep(float e0, float e1, float x) { return clamp((x - e0) / (e1 - e0), 0.0, 1.0); }
+
+float4 main(float4 position : SV_POSITION, float2 coord : TEXCOORD0) : SV_TARGET
+{
+ float alpha =
+ smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - coord.x)) *
+ smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - coord.y));
+
+ float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
+ return color * qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/quickcontrols/material/shaders/+qsb/RectangularGlow.frag b/src/quickcontrols/material/shaders/+qsb/RectangularGlow.frag
new file mode 100644
index 0000000000..5cfa2db6ed
--- /dev/null
+++ b/src/quickcontrols/material/shaders/+qsb/RectangularGlow.frag
Binary files differ
diff --git a/src/quickcontrols/material/shaders/RectangularGlow.frag b/src/quickcontrols/material/shaders/RectangularGlow.frag
new file mode 100644
index 0000000000..40bab5806c
--- /dev/null
+++ b/src/quickcontrols/material/shaders/RectangularGlow.frag
@@ -0,0 +1,19 @@
+uniform highp float qt_Opacity;
+uniform mediump float relativeSizeX;
+uniform mediump float relativeSizeY;
+uniform mediump float spread;
+uniform lowp vec4 color;
+varying highp vec2 qt_TexCoord0;
+
+highp float linearstep(highp float e0, highp float e1, highp float x) {
+ return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main() {
+ lowp float alpha =
+ smoothstep(0.0, relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
+ smoothstep(0.0, relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
+
+ highp float spreadMultiplier = linearstep(spread, 1.0 - spread, alpha);
+ gl_FragColor = color * qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/quickcontrols/material/shaders/RectangularGlow_rhi.frag b/src/quickcontrols/material/shaders/RectangularGlow_rhi.frag
new file mode 100644
index 0000000000..3e7d2dfe6f
--- /dev/null
+++ b/src/quickcontrols/material/shaders/RectangularGlow_rhi.frag
@@ -0,0 +1,28 @@
+#version 440
+
+layout(location = 0) in vec2 qt_TexCoord0;
+layout(location = 0) out vec4 fragColor;
+
+layout(std140, binding = 0) uniform buf {
+ mat4 qt_Matrix;
+ float qt_Opacity;
+ float relativeSizeX;
+ float relativeSizeY;
+ float spread;
+ vec4 color;
+} ubuf;
+
+float linearstep(float e0, float e1, float x)
+{
+ return clamp((x - e0) / (e1 - e0), 0.0, 1.0);
+}
+
+void main()
+{
+ float alpha =
+ smoothstep(0.0, ubuf.relativeSizeX, 0.5 - abs(0.5 - qt_TexCoord0.x)) *
+ smoothstep(0.0, ubuf.relativeSizeY, 0.5 - abs(0.5 - qt_TexCoord0.y));
+
+ float spreadMultiplier = linearstep(ubuf.spread, 1.0 - ubuf.spread, alpha);
+ fragColor = ubuf.color * ubuf.qt_Opacity * spreadMultiplier * spreadMultiplier;
+}
diff --git a/src/quickcontrols/material/shaders/compile.bat b/src/quickcontrols/material/shaders/compile.bat
new file mode 100644
index 0000000000..e0ccbb7ed5
--- /dev/null
+++ b/src/quickcontrols/material/shaders/compile.bat
@@ -0,0 +1,4 @@
+:: Copyright (C) 2019 The Qt Company Ltd.
+:: SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+qsb --glsl "150,120,100 es" --hlsl 50 --msl 12 -o +qsb/RectangularGlow.frag RectangularGlow_rhi.frag
diff --git a/src/quickcontrols/qquickattachedpropertypropagator.cpp b/src/quickcontrols/qquickattachedpropertypropagator.cpp
new file mode 100644
index 0000000000..ab6f47d4cd
--- /dev/null
+++ b/src/quickcontrols/qquickattachedpropertypropagator.cpp
@@ -0,0 +1,380 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickattachedpropertypropagator.h"
+
+#include <QtCore/qpointer.h>
+#include <QtQuick/qquickwindow.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qquickitemchangelistener_p.h>
+#include <QtQuickTemplates2/private/qquickpopup_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QQuickAttachedPropertyPropagator
+ \brief The QQuickAttachedPropertyPropagator class provides a way to
+ propagate attached properties.
+ \inmodule QtQuickControls2
+ \since 6.5
+
+ In QML, it is possible to
+ \l {Attached Properties and Attached Signal Handlers}{attach properties and
+ signal handlers} to objects. \l {Providing Attached Properties} goes into more
+ detail about how to expose your own C++ attached types.
+
+ QQuickAttachedPropertyPropagator provides an API to propagate attached
+ properties from a parent object to its children, similar to
+ \l {Control::}{font} and \l {Item::}{palette} propagation. It supports
+ propagation through \l {Item}{items}, \l {Popup}{popups}, and
+ \l {Window}{windows}.
+
+ If propagation of properties is not important, consider using a
+ \l {QML_SINGLETON}{C++} or
+ \l {Contents of a Module Definition qmldir File}{QML} singleton instead,
+ as it is better suited for that use case, and is more efficient in that
+ it only requires one QObject.
+
+ To use QQuickAttachedPropertyPropagator:
+ \list
+ \li Derive from it
+ \li Call \l initialize() in the constructor
+ \li Define set/inherit/propagate/reset functions for each property as needed
+ \li Reimplement \l attachedParentChange() to handle property inheritance
+ \endlist
+
+ For an example that demonstrates this in depth, see
+ \l {Qt Quick Controls - Attached Style Properties Example}.
+
+ \sa {Styling Qt Quick Controls}
+*/
+
+static QQuickAttachedPropertyPropagator *attachedObject(const QMetaObject *type, QObject *object, bool create = false)
+{
+ if (!object)
+ return nullptr;
+ auto func = qmlAttachedPropertiesFunction(object, type);
+ return qobject_cast<QQuickAttachedPropertyPropagator *>(qmlAttachedPropertiesObject(object, func, create));
+}
+
+/*!
+ \internal
+
+ Tries to find a QQuickAttachedPropertyPropagator whose type is \a ourAttachedType
+ and is attached to an ancestor of \a objectWeAreAttachedTo.
+
+ QQuickAttachedPropertyPropagator needs to know who its parent attached object is in
+ order to inherit attached property values from it. This is called when an
+ instance of QQuickAttachedPropertyPropagator is created, and whenever
+ \c {objectWeAreAttachedTo}'s parent changes, for example.
+*/
+static QQuickAttachedPropertyPropagator *findAttachedParent(const QMetaObject *ourAttachedType, QObject *objectWeAreAttachedTo)
+{
+ QQuickItem *item = qobject_cast<QQuickItem *>(objectWeAreAttachedTo);
+ if (item) {
+ // lookup parent items and popups
+ QQuickItem *parent = item->parentItem();
+ while (parent) {
+ QQuickAttachedPropertyPropagator *attached = attachedObject(ourAttachedType, parent);
+ if (attached)
+ return attached;
+
+ QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent->parent());
+ if (popup)
+ return attachedObject(ourAttachedType, popup);
+
+ parent = parent->parentItem();
+ }
+
+ // fallback to item's window
+ QQuickAttachedPropertyPropagator *attached = attachedObject(ourAttachedType, item->window());
+ if (attached)
+ return attached;
+ } else {
+ // lookup popup's window
+ QQuickPopup *popup = qobject_cast<QQuickPopup *>(objectWeAreAttachedTo);
+ if (popup)
+ return attachedObject(ourAttachedType, popup->popupItem()->window());
+ }
+
+ // lookup parent window
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(objectWeAreAttachedTo);
+ if (window) {
+ // It doesn't seem like a parent window can be anything but transient in Qt Quick.
+ QQuickWindow *parentWindow = qobject_cast<QQuickWindow *>(window->transientParent());
+ if (parentWindow) {
+ QQuickAttachedPropertyPropagator *attached = attachedObject(ourAttachedType, parentWindow);
+ if (attached)
+ return attached;
+ }
+ }
+
+ // fallback to engine (global)
+ if (objectWeAreAttachedTo) {
+ QQmlEngine *engine = qmlEngine(objectWeAreAttachedTo);
+ if (engine) {
+ QByteArray name = QByteArray("_q_") + ourAttachedType->className();
+ QQuickAttachedPropertyPropagator *attached = engine->property(name).value<QQuickAttachedPropertyPropagator *>();
+ if (!attached) {
+ attached = attachedObject(ourAttachedType, engine, true);
+ engine->setProperty(name, QVariant::fromValue(attached));
+ }
+ return attached;
+ }
+ }
+
+ return nullptr;
+}
+
+static QList<QQuickAttachedPropertyPropagator *> findAttachedChildren(const QMetaObject *type, QObject *object)
+{
+ QList<QQuickAttachedPropertyPropagator *> children;
+
+ QQuickItem *item = qobject_cast<QQuickItem *>(object);
+ if (!item) {
+ QQuickWindow *window = qobject_cast<QQuickWindow *>(object);
+ if (window)
+ item = window->contentItem();
+ }
+
+ if (!item)
+ return children;
+
+ // At this point, "item" could either be an item that the attached object is
+ // attached to directly, or the contentItem of a window that the attached object
+ // is attached to.
+
+ // Look for attached properties on items.
+ const auto childItems = item->childItems();
+ for (QQuickItem *child : childItems) {
+ QQuickAttachedPropertyPropagator *attached = attachedObject(type, child);
+ if (attached)
+ children += attached;
+ else
+ children += findAttachedChildren(type, child);
+ }
+
+ // Look for attached properties on windows. Windows declared in QML
+ // as children of a Window are QObject-parented to the contentItem (see
+ // QQuickWindowPrivate::data_append()). Windows declared as children
+ // of items are QObject-parented to those items.
+ const auto &windowChildren = item->children();
+ for (QObject *child : windowChildren) {
+ QQuickWindow *childWindow = qobject_cast<QQuickWindow *>(child);
+ if (childWindow) {
+ QQuickAttachedPropertyPropagator *attached = attachedObject(type, childWindow);
+ if (attached)
+ children += attached;
+ }
+ }
+
+ return children;
+}
+
+static QQuickItem *findAttachedItem(QObject *parent)
+{
+ QQuickItem *item = qobject_cast<QQuickItem *>(parent);
+ if (!item) {
+ QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent);
+ if (popup)
+ item = popup->popupItem();
+ }
+ return item;
+}
+
+class QQuickAttachedPropertyPropagatorPrivate : public QObjectPrivate, public QQuickItemChangeListener
+{
+public:
+ Q_DECLARE_PUBLIC(QQuickAttachedPropertyPropagator)
+
+ static QQuickAttachedPropertyPropagatorPrivate *get(QQuickAttachedPropertyPropagator *attachedObject)
+ {
+ return attachedObject->d_func();
+ }
+
+ void attachTo(QObject *object);
+ void detachFrom(QObject *object);
+ void setAttachedParent(QQuickAttachedPropertyPropagator *parent);
+
+ void itemWindowChanged(QQuickWindow *window);
+ void itemParentChanged(QQuickItem *item, QQuickItem *parent) override;
+
+ QList<QQuickAttachedPropertyPropagator *> attachedChildren;
+ QPointer<QQuickAttachedPropertyPropagator> attachedParent;
+};
+
+void QQuickAttachedPropertyPropagatorPrivate::attachTo(QObject *object)
+{
+ QQuickItem *item = findAttachedItem(object);
+ if (item) {
+ connect(item, &QQuickItem::windowChanged, this, &QQuickAttachedPropertyPropagatorPrivate::itemWindowChanged);
+ QQuickItemPrivate::get(item)->addItemChangeListener(this, QQuickItemPrivate::Parent);
+ }
+}
+
+void QQuickAttachedPropertyPropagatorPrivate::detachFrom(QObject *object)
+{
+ QQuickItem *item = findAttachedItem(object);
+ if (item) {
+ disconnect(item, &QQuickItem::windowChanged, this, &QQuickAttachedPropertyPropagatorPrivate::itemWindowChanged);
+ QQuickItemPrivate::get(item)->removeItemChangeListener(this, QQuickItemPrivate::Parent);
+ }
+}
+
+/*!
+ \internal
+
+ This function sets the attached parent of this attached object.
+
+ Currently it is called when:
+ \list
+ \li The target item's parent changes.
+ \li The target item's window changes.
+ \li The attached object is constructed, to set the attached parent
+ and the attached parent of the attached object children.
+ \li The attached object is destructed.
+ \endlist
+
+ \quotefromfile ../../examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+ \skipto MyStyle::resetTheme
+ \printuntil }
+*/
+void QQuickAttachedPropertyPropagatorPrivate::setAttachedParent(QQuickAttachedPropertyPropagator *parent)
+{
+ Q_Q(QQuickAttachedPropertyPropagator);
+ if (attachedParent == parent)
+ return;
+
+ QQuickAttachedPropertyPropagator *oldParent = attachedParent;
+ if (attachedParent)
+ QQuickAttachedPropertyPropagatorPrivate::get(attachedParent)->attachedChildren.removeOne(q);
+ attachedParent = parent;
+ if (parent)
+ QQuickAttachedPropertyPropagatorPrivate::get(parent)->attachedChildren.append(q);
+ q->attachedParentChange(parent, oldParent);
+}
+
+void QQuickAttachedPropertyPropagatorPrivate::itemWindowChanged(QQuickWindow *window)
+{
+ Q_Q(QQuickAttachedPropertyPropagator);
+ QQuickAttachedPropertyPropagator *attachedParent = nullptr;
+ QQuickItem *item = qobject_cast<QQuickItem *>(q->sender());
+ if (item)
+ attachedParent = findAttachedParent(q->metaObject(), item);
+ if (!attachedParent)
+ attachedParent = attachedObject(q->metaObject(), window);
+ setAttachedParent(attachedParent);
+}
+
+void QQuickAttachedPropertyPropagatorPrivate::itemParentChanged(QQuickItem *item, QQuickItem *parent)
+{
+ Q_Q(QQuickAttachedPropertyPropagator);
+ Q_UNUSED(parent);
+ setAttachedParent(findAttachedParent(q->metaObject(), item));
+}
+
+/*!
+ Constructs a QQuickAttachedPropertyPropagator with the given \a parent.
+
+ The \c parent will be used to find this object's
+ \l {attachedParent()}{attached parent}.
+
+ Derived classes should call \l initialize() in their constructor.
+*/
+QQuickAttachedPropertyPropagator::QQuickAttachedPropertyPropagator(QObject *parent)
+ : QObject(*(new QQuickAttachedPropertyPropagatorPrivate), parent)
+{
+ Q_D(QQuickAttachedPropertyPropagator);
+ d->attachTo(parent);
+}
+
+/*!
+ Destroys the QQuickAttachedPropertyPropagator.
+*/
+QQuickAttachedPropertyPropagator::~QQuickAttachedPropertyPropagator()
+{
+ Q_D(QQuickAttachedPropertyPropagator);
+ d->detachFrom(parent());
+ d->setAttachedParent(nullptr);
+}
+
+/*!
+ This function returns the attached children of this attached object.
+
+ The attached children are used when propagating property values:
+
+ \quotefromfile ../../examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+ \skipto MyStyle::propagateTheme
+ \printuntil }
+ \printuntil }
+*/
+QList<QQuickAttachedPropertyPropagator *> QQuickAttachedPropertyPropagator::attachedChildren() const
+{
+ Q_D(const QQuickAttachedPropertyPropagator);
+ return d->attachedChildren;
+}
+
+/*!
+ This function returns the attached parent of this attached object.
+
+ The attached parent is used when inheriting property values:
+
+ \quotefromfile ../../examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+ \skipto MyStyle::resetTheme
+ \printuntil }
+*/
+QQuickAttachedPropertyPropagator *QQuickAttachedPropertyPropagator::attachedParent() const
+{
+ Q_D(const QQuickAttachedPropertyPropagator);
+ return d->attachedParent;
+}
+
+/*!
+ Finds and sets the attached parent for this attached object, and then does
+ the same for its children. This must be called upon construction of the
+ attached object in order for propagation to work.
+
+ It can be useful to read global/default values before calling this
+ function. For example, before calling \c initialize(), the
+ \l {Imagine Style}{Imagine} style checks a static "globalsInitialized" flag
+ to see if it should read default values from \l QSettings. The values from
+ that file form the basis for any attached property values that have not
+ been explicitly set.
+
+ \quotefromfile ../../examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+ \skipto MyStyle::MyStyle
+ \printuntil }
+*/
+void QQuickAttachedPropertyPropagator::initialize()
+{
+ Q_D(QQuickAttachedPropertyPropagator);
+ QQuickAttachedPropertyPropagator *attachedParent = findAttachedParent(metaObject(), parent());
+ if (attachedParent)
+ d->setAttachedParent(attachedParent);
+
+ const QList<QQuickAttachedPropertyPropagator *> attachedChildren = findAttachedChildren(metaObject(), parent());
+ for (QQuickAttachedPropertyPropagator *child : attachedChildren)
+ QQuickAttachedPropertyPropagatorPrivate::get(child)->setAttachedParent(this);
+}
+
+/*!
+ This function is called whenever the attached parent of this
+ QQuickAttachedPropertyPropagator changes from \a oldParent to \a newParent.
+
+ Subclasses should reimplement this function to inherit attached properties
+ from \c newParent.
+
+ \quotefromfile ../../examples/quickcontrols/attachedstyleproperties/MyStyle/mystyle.cpp
+ \skipto attachedParentChange
+ \printuntil }
+ \printuntil }
+*/
+void QQuickAttachedPropertyPropagator::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
+{
+ Q_UNUSED(newParent);
+ Q_UNUSED(oldParent);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickattachedpropertypropagator.cpp"
diff --git a/src/quickcontrols/qquickattachedpropertypropagator.h b/src/quickcontrols/qquickattachedpropertypropagator.h
new file mode 100644
index 0000000000..ec5ff7991a
--- /dev/null
+++ b/src/quickcontrols/qquickattachedpropertypropagator.h
@@ -0,0 +1,37 @@
+// Copyright (C) 2022 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKATTACHEDOBJECT_H
+#define QQUICKATTACHEDOBJECT_H
+
+#include <QtCore/qobject.h>
+#include <QtQuickControls2/qtquickcontrols2global.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickAttachedPropertyPropagatorPrivate;
+
+class Q_QUICKCONTROLS2_EXPORT QQuickAttachedPropertyPropagator : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit QQuickAttachedPropertyPropagator(QObject *parent = nullptr);
+ ~QQuickAttachedPropertyPropagator();
+
+ QList<QQuickAttachedPropertyPropagator *> attachedChildren() const;
+
+ QQuickAttachedPropertyPropagator *attachedParent() const;
+
+protected:
+ void initialize();
+
+ virtual void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent);
+
+private:
+ Q_DECLARE_PRIVATE(QQuickAttachedPropertyPropagator)
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKATTACHEDOBJECT_H
diff --git a/src/quickcontrols/qquickstyle.cpp b/src/quickcontrols/qquickstyle.cpp
new file mode 100644
index 0000000000..da1bcd200b
--- /dev/null
+++ b/src/quickcontrols/qquickstyle.cpp
@@ -0,0 +1,474 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickstyle.h"
+#include "qquickstyle_p.h"
+
+#include <QtCore/qdir.h>
+#include <QtCore/qfile.h>
+#include <QtCore/qdebug.h>
+#include <QtCore/qsettings.h>
+#include <QtCore/qfileselector.h>
+#include <QtCore/qlibraryinfo.h>
+#include <QtCore/qloggingcategory.h>
+#include <QtCore/qmetaobject.h>
+#include <QtGui/qcolor.h>
+#include <QtGui/qfont.h>
+#include <QtGui/qpalette.h>
+#include <QtGui/private/qguiapplication_p.h>
+#include <QtGui/qpa/qplatformtheme.h>
+#include <QtQml/private/qqmlmetatype_p.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlfile.h>
+
+#include <functional>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcQtQuickControlsStyle, "qt.quick.controls.style")
+
+/*!
+ \class QQuickStyle
+ \brief The QQuickStyle class allows configuring the application style.
+ \inmodule QtQuickControls2
+ \since 5.7
+
+ QQuickStyle provides API for querying and configuring the application
+ \l {Styling Qt Quick Controls}{styles} of Qt Quick Controls.
+
+ \code
+ #include <QGuiApplication>
+ #include <QQmlApplicationEngine>
+ #include <QQuickStyle>
+
+ int main(int argc, char *argv[])
+ {
+ QGuiApplication app(argc, argv);
+
+ QQuickStyle::setStyle("Material");
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl("qrc:/main.qml"));
+
+ return app.exec();
+ }
+ \endcode
+
+ \note The style must be configured \b before loading QML that imports
+ Qt Quick Controls. It is not possible to change the style after the QML
+ types have been registered.
+
+ \note QQuickStyle is not supported when using
+ \l {Compile-Time Style Selection}{compile-time style selection}.
+
+ To create your own custom style, see \l {Creating a Custom Style}. Custom
+ styles do not need to implement all controls. By default, the styling
+ system uses the \l {Basic style} as a fallback for controls that a custom
+ style does not provide. It is possible to specify a different fallback
+ style to customize or extend one of the built-in styles.
+
+ \code
+ QQuickStyle::setStyle("MyStyle");
+ QQuickStyle::setFallbackStyle("Material");
+ \endcode
+
+ \sa {Styling Qt Quick Controls}
+*/
+
+struct QQuickStyleSpec
+{
+ QQuickStyleSpec() { }
+
+ QString name()
+ {
+ if (!resolved)
+ resolve();
+ return style.mid(style.lastIndexOf(QLatin1Char('/')) + 1);
+ }
+
+ QString path()
+ {
+ if (!resolved)
+ resolve();
+ QString s = style;
+ if (QQmlFile::isLocalFile(s))
+ s = QQmlFile::urlToLocalFileOrQrc(s);
+ return s.left(s.lastIndexOf(QLatin1Char('/')) + 1);
+ }
+
+ void setStyle(const QString &s)
+ {
+ qCDebug(lcQtQuickControlsStyle) << "style" << s << "set on QQuickStyleSpec";
+ if (s.contains(QLatin1Char('/'))) {
+ qWarning() << "Style names must not contain paths; see the \"Definition of a Style\" documentation for more information";
+ return;
+ }
+
+ qCDebug(lcQtQuickControlsStyle) << "clearing resolved flag and resolving";
+ style = s;
+ resolved = false;
+ resolve();
+ }
+
+ void setFallbackStyle(const QString &fallback, const QByteArray &method)
+ {
+ if (!fallback.isEmpty())
+ qCDebug(lcQtQuickControlsStyle) << "fallback style" << fallback << "set on QQuickStyleSpec via" << method;
+
+ fallbackStyle = fallback;
+ fallbackMethod = method;
+ }
+
+ void resolve()
+ {
+ qCDebug(lcQtQuickControlsStyle) << "resolving style";
+
+ if (style.isEmpty())
+ style = QGuiApplicationPrivate::styleOverride;
+ if (style.isEmpty())
+ style = QString::fromLocal8Bit(qgetenv("QT_QUICK_CONTROLS_STYLE"));
+ if (fallbackStyle.isEmpty())
+ setFallbackStyle(QString::fromLocal8Bit(qgetenv("QT_QUICK_CONTROLS_FALLBACK_STYLE")), "QT_QUICK_CONTROLS_FALLBACK_STYLE");
+#if QT_CONFIG(settings)
+ if (style.isEmpty() || fallbackStyle.isEmpty()) {
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(QStringLiteral("Controls"));
+ if (settings) {
+ if (style.isEmpty())
+ style = settings->value(QStringLiteral("Style")).toString();
+ if (fallbackStyle.isEmpty())
+ setFallbackStyle(settings->value(QStringLiteral("FallbackStyle")).toString(), ":/qtquickcontrols2.conf");
+ }
+ }
+#endif
+
+ auto builtInStyleList = QQuickStylePrivate::builtInStyles();
+ if (!fallbackStyle.isEmpty() && !builtInStyleList.contains(fallbackStyle)) {
+ qWarning().nospace().noquote() << fallbackMethod << ": the specified fallback style \"" <<
+ fallbackStyle << "\" is not one of the built-in Qt Quick Controls 2 styles";
+ fallbackStyle.clear();
+ }
+
+ // Find the config file.
+ resolveConfigFilePath();
+
+ usingDefaultStyle = false;
+
+ if (style.isEmpty() || style.toLower() == QStringLiteral("default")) {
+ usingDefaultStyle = true;
+ style.clear();
+
+ qCDebug(lcQtQuickControlsStyle) << "no style (or Default) was specified;"
+ << "checking if we have an appropriate style for this platform";
+
+ // If these defaults are changed, ensure that the "Using Styles in Qt Quick Controls"
+ // section of qtquickcontrols2-styles.qdoc is updated.
+#if defined(Q_OS_MACOS)
+ style = QLatin1String("macOS");
+#elif defined(Q_OS_WINDOWS)
+ style = QLatin1String("Windows");
+#elif defined(Q_OS_ANDROID)
+ style = QLatin1String("Material");
+#elif defined(Q_OS_LINUX)
+ style = QLatin1String("Fusion");
+#elif defined(Q_OS_IOS)
+ style = QLatin1String("iOS");
+#endif
+ if (!style.isEmpty())
+ qCDebug(lcQtQuickControlsStyle) << "using" << style << "as a default";
+ else
+ qCDebug(lcQtQuickControlsStyle) << "no appropriate style found; using Basic as a default";
+ }
+
+ // If it's still empty by this point, then it means we have no native style available for this platform,
+ // as is the case on e.g. embedded. In that case, we want to default to the Basic style,
+ // which is what effectiveStyleName() returns when "style" is empty.
+ custom = !builtInStyleList.contains(QQuickStylePrivate::effectiveStyleName(style));
+
+ resolved = true;
+
+ qCDebug(lcQtQuickControlsStyle).nospace() << "done resolving:"
+ << "\n style=" << style
+ << "\n custom=" << custom
+ << "\n resolved=" << resolved
+ << "\n fallbackStyle=" << fallbackStyle
+ << "\n fallbackMethod=" << fallbackMethod
+ << "\n configFilePath=" << configFilePath;
+ }
+
+ void reset()
+ {
+ qCDebug(lcQtQuickControlsStyle) << "resetting values to their defaults";
+
+ custom = false;
+ resolved = false;
+ usingDefaultStyle = false;
+ style.clear();
+ fallbackStyle.clear();
+ fallbackMethod.clear();
+ configFilePath.clear();
+ }
+
+ QString resolveConfigFilePath()
+ {
+ if (configFilePath.isEmpty()) {
+ configFilePath = QFile::decodeName(qgetenv("QT_QUICK_CONTROLS_CONF"));
+ if (configFilePath.isEmpty() || !QFile::exists(configFilePath)) {
+ if (!configFilePath.isEmpty())
+ qWarning("QT_QUICK_CONTROLS_CONF=%s: No such file", qPrintable(configFilePath));
+
+ configFilePath = QStringLiteral(":/qtquickcontrols2.conf");
+ }
+ }
+ return configFilePath;
+ }
+
+ // Is this a custom style defined by the user and not "built-in" style?
+ bool custom = false;
+ // Have we resolved the style yet?
+ bool resolved = false;
+ // Are we using the default style for this platform (because no style was specified)?
+ bool usingDefaultStyle = false;
+ // The name of the style.
+ QString style;
+ // The built-in style to use if the requested style cannot be found.
+ QString fallbackStyle;
+ // A description of the way in which fallbackStyle was set, used in e.g. warning messages shown to the user.
+ QByteArray fallbackMethod;
+ // The path to the qtquickcontrols2.conf file.
+ QString configFilePath;
+};
+
+Q_GLOBAL_STATIC(QQuickStyleSpec, styleSpec)
+
+/*
+ Note that most of these functions (with the exception of e.g. isResolved())
+ should not be called before the style has been resolved, as it's only after
+ that happens that they will have been set.
+*/
+QString QQuickStylePrivate::style()
+{
+ return styleSpec()->style;
+}
+
+QString QQuickStylePrivate::effectiveStyleName(const QString &styleName)
+{
+ return !styleName.isEmpty() ? styleName : QLatin1String("Basic");
+}
+
+QString QQuickStylePrivate::fallbackStyle()
+{
+ return styleSpec()->fallbackStyle;
+}
+
+bool QQuickStylePrivate::isCustomStyle()
+{
+ return styleSpec()->custom;
+}
+
+bool QQuickStylePrivate::isResolved()
+{
+ return styleSpec()->resolved;
+}
+
+bool QQuickStylePrivate::isUsingDefaultStyle()
+{
+ return styleSpec()->usingDefaultStyle;
+}
+
+void QQuickStylePrivate::init()
+{
+ QQuickStyleSpec *spec = styleSpec();
+ spec->resolve();
+}
+
+void QQuickStylePrivate::reset()
+{
+ if (styleSpec())
+ styleSpec()->reset();
+}
+
+QString QQuickStylePrivate::configFilePath()
+{
+ return styleSpec()->resolveConfigFilePath();
+}
+
+QSharedPointer<QSettings> QQuickStylePrivate::settings(const QString &group)
+{
+#ifndef QT_NO_SETTINGS
+ const QString filePath = QQuickStylePrivate::configFilePath();
+ if (QFile::exists(filePath)) {
+ QFileSelector selector;
+ QSettings *settings = new QSettings(selector.select(filePath), QSettings::IniFormat);
+ if (!group.isEmpty())
+ settings->beginGroup(group);
+ return QSharedPointer<QSettings>(settings);
+ }
+#endif // QT_NO_SETTINGS
+ return QSharedPointer<QSettings>();
+}
+
+#if QT_CONFIG(settings)
+static void readValue(const QSharedPointer<QSettings> &settings, const QString &name, std::function<void(const QVariant &)> setValue)
+{
+ const QVariant var = settings->value(name);
+ if (var.isValid())
+ setValue(var);
+}
+
+template <typename Enum>
+static Enum toEnumValue(const QVariant &var)
+{
+ // ### TODO: expose QFont enums to the meta object system using Q_ENUM
+ //QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ //bool ok = false;
+ //int value = enumeration.keyToValue(var.toByteArray(), &ok);
+ //if (!ok)
+ // value = var.toInt();
+ //return static_cast<Enum>(value);
+
+ return static_cast<Enum>(var.toInt());
+}
+
+const QFont *QQuickStylePrivate::readFont(const QSharedPointer<QSettings> &settings)
+{
+ const QVariant var = settings->value(QStringLiteral("Font"));
+ if (var.isValid())
+ return new QFont(var.value<QFont>());
+
+ QFont f;
+ settings->beginGroup(QStringLiteral("Font"));
+ readValue(settings, QStringLiteral("Family"), [&f](const QVariant &var) { f.setFamilies(QStringList{var.toString()}); });
+ readValue(settings, QStringLiteral("PointSize"), [&f](const QVariant &var) { f.setPointSizeF(var.toReal()); });
+ readValue(settings, QStringLiteral("PixelSize"), [&f](const QVariant &var) { f.setPixelSize(var.toInt()); });
+ readValue(settings, QStringLiteral("StyleHint"), [&f](const QVariant &var) { f.setStyleHint(toEnumValue<QFont::StyleHint>(var.toInt())); });
+ readValue(settings, QStringLiteral("Weight"), [&f](const QVariant &var) { f.setWeight(toEnumValue<QFont::Weight>(var)); });
+ readValue(settings, QStringLiteral("Style"), [&f](const QVariant &var) { f.setStyle(toEnumValue<QFont::Style>(var.toInt())); });
+ settings->endGroup();
+ return new QFont(f);
+}
+
+static void readColorGroup(const QSharedPointer<QSettings> &settings, QPalette::ColorGroup group, QPalette *palette)
+{
+ const QStringList keys = settings->childKeys();
+ if (keys.isEmpty())
+ return;
+
+ static const int index = QPalette::staticMetaObject.indexOfEnumerator("ColorRole");
+ Q_ASSERT(index != -1);
+ QMetaEnum metaEnum = QPalette::staticMetaObject.enumerator(index);
+
+ for (const QString &key : keys) {
+ bool ok = false;
+ int role = metaEnum.keyToValue(key.toUtf8(), &ok);
+ if (ok)
+ palette->setColor(group, static_cast<QPalette::ColorRole>(role), settings->value(key).value<QColor>());
+ }
+}
+
+const QPalette *QQuickStylePrivate::readPalette(const QSharedPointer<QSettings> &settings)
+{
+ QPalette p;
+ settings->beginGroup(QStringLiteral("Palette"));
+ readColorGroup(settings, QPalette::All, &p);
+
+ settings->beginGroup(QStringLiteral("Normal"));
+ readColorGroup(settings, QPalette::Normal, &p);
+ settings->endGroup();
+
+ settings->beginGroup(QStringLiteral("Disabled"));
+ readColorGroup(settings, QPalette::Disabled, &p);
+ settings->endGroup();
+ return new QPalette(p);
+}
+#endif // QT_CONFIG(settings)
+
+bool QQuickStylePrivate::isDarkSystemTheme()
+{
+ const bool dark = [](){
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
+ return theme->appearance() == Qt::Appearance::Dark;
+ return false;
+ }();
+ return dark;
+}
+
+QStringList QQuickStylePrivate::builtInStyles()
+{
+ return {
+ QLatin1String("Basic"),
+ QLatin1String("Fusion"),
+ QLatin1String("Imagine"),
+#ifdef Q_OS_MACOS
+ QLatin1String("macOS"),
+ QLatin1String("iOS"),
+#endif
+#ifdef Q_OS_IOS
+ QLatin1String("iOS"),
+#endif
+ QLatin1String("Material"),
+ QLatin1String("Universal"),
+#ifdef Q_OS_WINDOWS
+ QLatin1String("Windows")
+#endif
+ };
+}
+
+/*!
+ Returns the name of the application style.
+
+ \note The application style can be specified by passing a \c -style command
+ line argument. Therefore \c name() may not return a fully resolved
+ value if called before constructing a QGuiApplication.
+*/
+QString QQuickStyle::name()
+{
+ return styleSpec()->name();
+}
+
+/*!
+ Sets the application style to \a style.
+
+ \note The style must be configured \b before loading QML that imports Qt Quick Controls.
+ It is not possible to change the style after the QML types have been registered.
+
+ \sa setFallbackStyle(), {Using Styles in Qt Quick Controls}
+*/
+void QQuickStyle::setStyle(const QString &style)
+{
+ qCDebug(lcQtQuickControlsStyle) << "setStyle called with" << style;
+
+ if (QQmlMetaType::matchingModuleVersion(
+ QStringLiteral("QtQuick.Controls"), QTypeRevision::fromVersion(2, 0)).isValid()) {
+ qWarning() << "ERROR: QQuickStyle::setStyle() must be called before loading QML that imports Qt Quick Controls 2.";
+ return;
+ }
+
+ styleSpec()->setStyle(style);
+}
+
+/*!
+ \since 5.8
+ Sets the application fallback style to \a style.
+
+ \note The fallback style must be the name of one of the built-in Qt Quick Controls styles, e.g. "Material".
+
+ \note The style must be configured \b before loading QML that imports Qt Quick Controls.
+ It is not possible to change the style after the QML types have been registered.
+
+ The fallback style can be also specified by setting the \c QT_QUICK_CONTROLS_FALLBACK_STYLE
+ \l {Supported Environment Variables in Qt Quick Controls}{environment variable}.
+
+ \sa setStyle(), {Using Styles in Qt Quick Controls}
+*/
+void QQuickStyle::setFallbackStyle(const QString &style)
+{
+ if (QQmlMetaType::matchingModuleVersion(
+ QStringLiteral("QtQuick.Controls"), QTypeRevision::fromVersion(2, 0)).isValid()) {
+ qWarning() << "ERROR: QQuickStyle::setFallbackStyle() must be called before loading QML that imports Qt Quick Controls 2.";
+ return;
+ }
+
+ styleSpec()->setFallbackStyle(style, "QQuickStyle::setFallbackStyle()");
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/qquickstyle.h b/src/quickcontrols/qquickstyle.h
new file mode 100644
index 0000000000..019cacef14
--- /dev/null
+++ b/src/quickcontrols/qquickstyle.h
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKSTYLE_H
+#define QQUICKSTYLE_H
+
+#include <QtCore/qurl.h>
+#include <QtCore/qstring.h>
+#include <QtQuickControls2/qtquickcontrols2global.h>
+
+QT_BEGIN_NAMESPACE
+
+class Q_QUICKCONTROLS2_EXPORT QQuickStyle
+{
+public:
+ static QString name();
+ static void setStyle(const QString &style);
+ static void setFallbackStyle(const QString &style);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKSTYLE_H
diff --git a/src/quickcontrols/qquickstyle_p.h b/src/quickcontrols/qquickstyle_p.h
new file mode 100644
index 0000000000..8a563aee7b
--- /dev/null
+++ b/src/quickcontrols/qquickstyle_p.h
@@ -0,0 +1,48 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKSTYLE_P_H
+#define QQUICKSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qsharedpointer.h>
+#include <QtQuickControls2/qtquickcontrols2global.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QSettings;
+
+class Q_QUICKCONTROLS2_EXPORT QQuickStylePrivate
+{
+public:
+ static QString style();
+ static QString effectiveStyleName(const QString &styleName);
+ static QString fallbackStyle();
+ static bool isCustomStyle();
+ static bool isResolved();
+ static bool isUsingDefaultStyle();
+ static bool exists();
+ static void init();
+ static void reset();
+ static QString configFilePath();
+ static QSharedPointer<QSettings> settings(const QString &group = QString());
+ static const QFont *readFont(const QSharedPointer<QSettings> &settings);
+ static const QPalette *readPalette(const QSharedPointer<QSettings> &settings);
+ static bool isDarkSystemTheme();
+ static QStringList builtInStyles();
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKSTYLE_P_H
diff --git a/src/quickcontrols/qquickstyleplugin.cpp b/src/quickcontrols/qquickstyleplugin.cpp
new file mode 100644
index 0000000000..8f0a71c9ad
--- /dev/null
+++ b/src/quickcontrols/qquickstyleplugin.cpp
@@ -0,0 +1,127 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickstyle.h"
+#include "qquickstyle_p.h"
+#include "qquickstyleplugin_p.h"
+
+#include <QtCore/private/qfileselector_p.h>
+#include <QtCore/qloggingcategory.h>
+#include <QtGui/qstylehints.h>
+#include <QtGui/qguiapplication.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlfile.h>
+#include <QtQml/private/qqmlmetatype_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcStylePlugin, "qt.quick.controls.styleplugin")
+
+QQuickStylePlugin::QQuickStylePlugin(QObject *parent)
+ : QQmlExtensionPlugin(parent)
+{
+}
+
+QQuickStylePlugin::~QQuickStylePlugin()
+{
+}
+
+void QQuickStylePlugin::registerTypes(const char *uri)
+{
+ qCDebug(lcStylePlugin).nospace() << "registerTypes called with uri " << uri << "; plugin name is " << name();
+
+ const QTypeRevision latestControlsRevision = QQmlMetaType::latestModuleVersion(QLatin1String("QtQuick.Controls"));
+ // Use the private function because we don't want to cause resolve() to be called,
+ // as the logic that assigns a default style if one wasn't set would interfere with compile-time style selection.
+ QString styleName = QQuickStylePrivate::style();
+ if (!latestControlsRevision.isValid() && styleName.isEmpty()) {
+ // The user hasn't imported QtQuick.Controls, nor set a style via the runtime methods.
+ qCDebug(lcStylePlugin).nospace() << uri << " imported before QtQuick.Controls; using compile-time style selection";
+ QQuickStyle::setStyle(name());
+ styleName = name();
+ }
+
+ // Even if this style plugin isn't for the style set by the user,
+ // we still want to create the theme object, because that function
+ // is also responsible for reading values from qtquickcontrols2.conf.
+ // So, even if a style doesn't have a QQuickTheme, it can still have
+ // values set for (e.g. fonts and palettes) in qtquickcontrols2.conf.
+ const QString effectiveCurrentStyleName = QQuickStylePrivate::effectiveStyleName(styleName);
+ auto theme = QQuickTheme::instance();
+ if (!theme) {
+ qCDebug(lcStylePlugin) << "creating theme";
+ theme = createTheme(effectiveCurrentStyleName);
+ }
+
+ if (name() != effectiveCurrentStyleName) {
+ qCDebug(lcStylePlugin).nospace() << "theme does not belong to current style ("
+ << effectiveCurrentStyleName << "); not calling initializeTheme()";
+ return;
+ }
+
+ qCDebug(lcStylePlugin) << "theme has not yet been initialized; calling initializeTheme()";
+ initializeTheme(theme);
+ connect(QGuiApplication::styleHints(), &QStyleHints::appearanceChanged,
+ this, &QQuickStylePlugin::updateTheme);
+
+ if (!styleName.isEmpty())
+ QFileSelectorPrivate::addStatics(QStringList() << styleName);
+}
+
+void QQuickStylePlugin::unregisterTypes()
+{
+ qCDebug(lcStylePlugin) << "unregisterTypes called; plugin name is" << name();
+ if (!QQuickThemePrivate::instance)
+ return;
+
+ disconnect(QGuiApplication::styleHints(), &QStyleHints::appearanceChanged,
+ this, &QQuickStylePlugin::updateTheme);
+
+ // Not every style has a plugin - some styles are QML-only. So, we clean this
+ // stuff up when the first style plugin is unregistered rather than when the
+ // plugin for the current style is unregistered.
+ QQuickThemePrivate::instance.reset();
+ QQuickStylePrivate::reset();
+}
+
+/*!
+ \internal
+
+ Responsible for setting the font and palette settings that were specified in the
+ qtquickcontrols2.conf file.
+
+ Style-specific settings (e.g. Variant=Dense) are read in the constructor of the
+ appropriate style plugin (e.g. QtQuickControls2MaterialStylePlugin).
+
+ Implicit style-specific font and palette values are assigned in the relevant theme
+ (e.g. QQuickMaterialTheme).
+*/
+QQuickTheme *QQuickStylePlugin::createTheme(const QString &name)
+{
+ qCDebug(lcStylePlugin) << "creating QQuickTheme instance to be initialized by style-specific theme of" << name;
+
+ QQuickTheme *theme = new QQuickTheme;
+#if QT_CONFIG(settings)
+ QQuickThemePrivate *p = QQuickThemePrivate::get(theme);
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(name);
+ if (settings) {
+ p->defaultFont.reset(QQuickStylePrivate::readFont(settings));
+ // Set the default font as the System scope, because that's what
+ // QQuickControlPrivate::parentFont() uses as its fallback if no
+ // parent item has a font explicitly set. QQuickControlPrivate::parentFont()
+ // is used as the starting point for font inheritance/resolution.
+ // The same goes for palettes below.
+ theme->setFont(QQuickTheme::System, *p->defaultFont);
+
+ p->defaultPalette.reset(QQuickStylePrivate::readPalette(settings));
+ theme->setPalette(QQuickTheme::System, *p->defaultPalette);
+ }
+#endif
+ QQuickThemePrivate::instance.reset(theme);
+ return theme;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickstyleplugin_p.cpp"
diff --git a/src/quickcontrols/qquickstyleplugin_p.h b/src/quickcontrols/qquickstyleplugin_p.h
new file mode 100644
index 0000000000..d0f690205c
--- /dev/null
+++ b/src/quickcontrols/qquickstyleplugin_p.h
@@ -0,0 +1,49 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKSTYLEPLUGIN_P_H
+#define QQUICKSTYLEPLUGIN_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQml/qqmlextensionplugin.h>
+#include <QtQuickControls2/qtquickcontrols2global.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class Q_QUICKCONTROLS2_EXPORT QQuickStylePlugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+
+public:
+ explicit QQuickStylePlugin(QObject *parent = nullptr);
+ ~QQuickStylePlugin();
+
+ virtual QString name() const = 0;
+ virtual void initializeTheme(QQuickTheme *theme) = 0;
+ virtual void updateTheme() {}
+
+ void registerTypes(const char *uri) override;
+ void unregisterTypes() override;
+
+private:
+ QQuickTheme *createTheme(const QString &name);
+
+ Q_DISABLE_COPY(QQuickStylePlugin)
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKSTYLEPLUGIN_P_H
diff --git a/src/quickcontrols/qt_cmdline.cmake b/src/quickcontrols/qt_cmdline.cmake
new file mode 100644
index 0000000000..ed009c5407
--- /dev/null
+++ b/src/quickcontrols/qt_cmdline.cmake
@@ -0,0 +1,10 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+qt_commandline_option(style-fusion TYPE boolean NAME quickcontrols2-fusion)
+qt_commandline_option(style-imagine TYPE boolean NAME quickcontrols2-imagine)
+qt_commandline_option(style-ios TYPE boolean NAME quickcontrols2-ios)
+qt_commandline_option(style-material TYPE boolean NAME quickcontrols2-material)
+qt_commandline_option(style-universal TYPE boolean NAME quickcontrols2-universal)
+qt_commandline_option(style-macos TYPE boolean NAME quickcontrols2-macos)
+qt_commandline_option(style-windows TYPE boolean NAME quickcontrols2-windows)
diff --git a/src/quickcontrols/qtquickcontrols2global.h b/src/quickcontrols/qtquickcontrols2global.h
new file mode 100644
index 0000000000..7e52bb1863
--- /dev/null
+++ b/src/quickcontrols/qtquickcontrols2global.h
@@ -0,0 +1,16 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QTQUICKCONTROLS2GLOBAL_H
+#define QTQUICKCONTROLS2GLOBAL_H
+
+#include <QtCore/qglobal.h>
+#include <QtQuickControls2/qtquickcontrols2exports.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_QUICKCONTROLS2_EXPORT void qml_register_types_QtQuick_Controls();
+
+QT_END_NAMESPACE
+
+#endif // QTQUICKCONTROLS2GLOBAL_H
diff --git a/src/quickcontrols/qtquickcontrols2plugin.cpp b/src/quickcontrols/qtquickcontrols2plugin.cpp
new file mode 100644
index 0000000000..8e30e8428b
--- /dev/null
+++ b/src/quickcontrols/qtquickcontrols2plugin.cpp
@@ -0,0 +1,140 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QtCore/private/qfileselector_p.h>
+#include <QtCore/qloggingcategory.h>
+#include <QtQml/qqmlengine.h>
+#include <QtQml/qqmlextensionplugin.h>
+#include <QtQuickTemplates2/private/qquicktheme_p_p.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+#include <QtQuickControls2/qtquickcontrols2global.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls);
+
+Q_LOGGING_CATEGORY(lcQtQuickControls2Plugin, "qt.quick.controls.qtquickcontrols2plugin")
+
+class QtQuickControls2Plugin : public QQmlExtensionPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2Plugin(QObject *parent = nullptr);
+ ~QtQuickControls2Plugin();
+
+ void registerTypes(const char *uri) override;
+ void unregisterTypes() override;
+
+private:
+ // We store these because the style plugins can be unregistered before
+ // QtQuickControls2Plugin, and since QQuickStylePlugin calls QQuickStylePrivate::reset(),
+ // the style information can be lost when it comes time to call qmlUnregisterModuleImport().
+ // It also avoids unnecessarily resolving the style after resetting it just to get the style
+ // name in unregisterTypes().
+ bool customStyle = false;
+ QString registeredStyleUri;
+ QString registeredFallbackStyleUri;
+};
+
+static const char *qtQuickControlsUri = "QtQuick.Controls";
+
+QString styleUri()
+{
+ const QString style = QQuickStyle::name();
+ if (!QQuickStylePrivate::isCustomStyle()) {
+ // The style set is a built-in style.
+ const QString styleName = QQuickStylePrivate::effectiveStyleName(style);
+ return QString::fromLatin1("QtQuick.Controls.%1").arg(styleName);
+ }
+
+ // This is a custom style, so just use the name as the import uri.
+ QString styleName = style;
+ if (styleName.startsWith(QLatin1String(":/")))
+ styleName.remove(0, 2);
+ return styleName;
+}
+
+QString fallbackStyleUri()
+{
+ // The fallback style must be a built-in style, so we don't need to check for custom styles here.
+ const QString fallbackStyle = QQuickStylePrivate::fallbackStyle();
+ const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(fallbackStyle);
+ return QString::fromLatin1("QtQuick.Controls.%1").arg(fallbackStyleName);
+}
+
+QtQuickControls2Plugin::QtQuickControls2Plugin(QObject *parent) : QQmlExtensionPlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls;
+ Q_UNUSED(registration);
+}
+
+QtQuickControls2Plugin::~QtQuickControls2Plugin()
+{
+ // Intentionally empty: we use register/unregisterTypes() to do
+ // initialization and cleanup, as plugins are not unloaded on macOS.
+}
+
+void QtQuickControls2Plugin::registerTypes(const char *uri)
+{
+ qCDebug(lcQtQuickControls2Plugin) << "registerTypes() called with uri" << uri;
+
+ // It's OK that the style is resolved more than once; some accessors like name() cause it to be called, for example.
+ QQuickStylePrivate::init();
+
+ const QString styleName = QQuickStylePrivate::effectiveStyleName(QQuickStyle::name());
+ const QString fallbackStyleName = QQuickStylePrivate::effectiveStyleName(QQuickStylePrivate::fallbackStyle());
+ qCDebug(lcQtQuickControls2Plugin) << "style:" << QQuickStyle::name() << "effective style:" << styleName
+ << "fallback style:" << QQuickStylePrivate::fallbackStyle() << "effective fallback style:" << fallbackStyleName;
+
+ // If the style is Basic, we don't need to register the fallback because the Basic style
+ // provides all controls. Also, if we didn't return early here, we can get an infinite import loop
+ // when the style is set to Basic.
+ if (styleName != fallbackStyleName && styleName != QLatin1String("Basic")) {
+ registeredFallbackStyleUri = ::fallbackStyleUri();
+ qCDebug(lcQtQuickControls2Plugin) << "calling qmlRegisterModuleImport() to register fallback style with"
+ << " uri \"" << qtQuickControlsUri << "\" moduleMajor" << QQmlModuleImportModuleAny
+ << "import" << registeredFallbackStyleUri << "importMajor" << QQmlModuleImportAuto;
+ // The fallback style must be a built-in style, so we match the version number.
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(),
+ QQmlModuleImportAuto, QQmlModuleImportAuto);
+ }
+
+ // If the user imports QtQuick.Controls 2.15, and they're using the Material style, we should import version 2.15.
+ // However, if they import QtQuick.Controls 2.15, but are using a custom style, we want to use the latest version
+ // number of their style.
+ customStyle = QQuickStylePrivate::isCustomStyle();
+ registeredStyleUri = ::styleUri();
+ const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ qCDebug(lcQtQuickControls2Plugin).nospace() << "calling qmlRegisterModuleImport() to register primary style with"
+ << " uri \"" << qtQuickControlsUri << "\" moduleMajor " << importMajor
+ << " import " << registeredStyleUri << " importMajor " << importMajor;
+ qmlRegisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor);
+
+ if (customStyle)
+ QFileSelectorPrivate::addStatics(QStringList() << styleName);
+}
+
+void QtQuickControls2Plugin::unregisterTypes()
+{
+ qCDebug(lcQtQuickControls2Plugin) << "unregisterTypes() called";
+
+ if (!registeredFallbackStyleUri.isEmpty()) {
+ // We registered a fallback style, so now we need to unregister it.
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredFallbackStyleUri.toUtf8().constData(),
+ QQmlModuleImportAuto, QQmlModuleImportAuto);
+ registeredFallbackStyleUri.clear();
+ }
+
+ const int importMajor = !customStyle ? QQmlModuleImportAuto : QQmlModuleImportLatest;
+ qmlUnregisterModuleImport(qtQuickControlsUri, QQmlModuleImportModuleAny, registeredStyleUri.toUtf8().constData(), importMajor);
+ customStyle = false;
+ registeredStyleUri.clear();
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2plugin.moc"
diff --git a/src/quickcontrols/universal/ApplicationWindow.qml b/src/quickcontrols/universal/ApplicationWindow.qml
new file mode 100644
index 0000000000..7828d20480
--- /dev/null
+++ b/src/quickcontrols/universal/ApplicationWindow.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.ApplicationWindow {
+ id: window
+
+ color: Universal.background
+
+ FocusRectangle {
+ parent: window.activeFocusControl
+ width: parent ? parent.width : 0
+ height: parent ? parent.height : 0
+ visible: parent && !!parent.useSystemFocusVisuals && !!parent.visualFocus
+ }
+}
diff --git a/src/quickcontrols/universal/BusyIndicator.qml b/src/quickcontrols/universal/BusyIndicator.qml
new file mode 100644
index 0000000000..64dfdd251a
--- /dev/null
+++ b/src/quickcontrols/universal/BusyIndicator.qml
@@ -0,0 +1,27 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.BusyIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: BusyIndicatorImpl {
+ implicitWidth: 20
+ implicitHeight: 20
+
+ readonly property real size: Math.min(control.availableWidth, control.availableHeight)
+
+ count: size < 60 ? 5 : 6 // "Small" vs. "Large"
+ color: control.Universal.accent
+ visible: control.running
+ }
+}
diff --git a/src/quickcontrols/universal/Button.qml b/src/quickcontrols/universal/Button.qml
new file mode 100644
index 0000000000..bdf10e3c8c
--- /dev/null
+++ b/src/quickcontrols/universal/Button.qml
@@ -0,0 +1,56 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.Button {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 8
+ verticalPadding: padding - 4
+ spacing: 8
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ property bool useSystemFocusVisuals: true
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+
+ visible: !control.flat || control.down || control.checked || control.highlighted
+ color: control.down ? control.Universal.baseMediumLowColor :
+ control.enabled && (control.highlighted || control.checked) ? control.Universal.accent :
+ control.Universal.baseLowColor
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+ visible: enabled && control.hovered
+ border.width: 2 // ButtonBorderThemeThickness
+ border.color: control.Universal.baseMediumLowColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/CMakeLists.txt b/src/quickcontrols/universal/CMakeLists.txt
new file mode 100644
index 0000000000..6f5dc1bb25
--- /dev/null
+++ b/src/quickcontrols/universal/CMakeLists.txt
@@ -0,0 +1,156 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2universalstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "ApplicationWindow.qml"
+ "BusyIndicator.qml"
+ "Button.qml"
+ "CheckBox.qml"
+ "CheckDelegate.qml"
+ "ComboBox.qml"
+ "DelayButton.qml"
+ "Dial.qml"
+ "Dialog.qml"
+ "DialogButtonBox.qml"
+ "Drawer.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "HorizontalHeaderView.qml"
+ "ItemDelegate.qml"
+ "Label.qml"
+ "Menu.qml"
+ "MenuBar.qml"
+ "MenuBarItem.qml"
+ "MenuItem.qml"
+ "MenuSeparator.qml"
+ "Page.qml"
+ "PageIndicator.qml"
+ "Pane.qml"
+ "Popup.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "RadioDelegate.qml"
+ "RangeSlider.qml"
+ "RoundButton.qml"
+ "ScrollView.qml"
+ "ScrollBar.qml"
+ "ScrollIndicator.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "SplitView.qml"
+ "StackView.qml"
+ "SwipeDelegate.qml"
+ "SwitchDelegate.qml"
+ "Switch.qml"
+ "TabBar.qml"
+ "TabButton.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ToolBar.qml"
+ "ToolButton.qml"
+ "ToolSeparator.qml"
+ "ToolTip.qml"
+ "Tumbler.qml"
+ "VerticalHeaderView.qml"
+)
+set_source_files_properties(DelayButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.2;6.0"
+)
+set_source_files_properties(Dialog.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(DialogButtonBox.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(HorizontalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+set_source_files_properties(MenuBar.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuBarItem.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.3;6.0"
+)
+set_source_files_properties(MenuSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(RoundButton.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(SplitView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.13;6.0"
+)
+set_source_files_properties(ToolSeparator.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.1;6.0"
+)
+set_source_files_properties(VerticalHeaderView.qml PROPERTIES
+ QT_QML_SOURCE_VERSIONS "2.15;6.0"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2universalstyleplugin
+ URI "QtQuick.Controls.Universal"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2UniversalStylePlugin
+ DEPENDENCIES
+ QtQuick/auto
+ IMPORTS
+ QtQuick.Controls.Basic/auto
+ PLUGIN_TARGET qtquickcontrols2universalstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qquickuniversalstyle.cpp qquickuniversalstyle_p.h
+ qquickuniversaltheme.cpp qquickuniversaltheme_p.h
+ qtquickcontrols2universalstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+qt_internal_add_resource(qtquickcontrols2universalstyleplugin "qtquickcontrols2universalstyleplugin"
+ PREFIX
+ "/qt-project.org/imports/QtQuick/Controls/Universal"
+ FILES
+ "images/checkmark.png"
+ "images/checkmark@2x.png"
+ "images/checkmark@3x.png"
+ "images/checkmark@4x.png"
+ "images/downarrow.png"
+ "images/downarrow@2x.png"
+ "images/downarrow@3x.png"
+ "images/downarrow@4x.png"
+ "images/leftarrow.png"
+ "images/leftarrow@2x.png"
+ "images/leftarrow@3x.png"
+ "images/leftarrow@4x.png"
+ "images/rightarrow.png"
+ "images/rightarrow@2x.png"
+ "images/rightarrow@3x.png"
+ "images/rightarrow@4x.png"
+)
+
+add_subdirectory(impl)
+
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2universalstyleplugin quickwindow)
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2universalstyleplugin
+ qtquickcontrols2universalstyleimplplugin)
+
+# Basic style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2universalstyleplugin
+ qtquickcontrols2basicstyleplugin)
diff --git a/src/quickcontrols/universal/CheckBox.qml b/src/quickcontrols/universal/CheckBox.qml
new file mode 100644
index 0000000000..c7f99b3b2b
--- /dev/null
+++ b/src/quickcontrols/universal/CheckBox.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.CheckBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 8
+
+ property bool useSystemFocusVisuals: true
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+}
diff --git a/src/quickcontrols/universal/CheckDelegate.qml b/src/quickcontrols/universal/CheckDelegate.qml
new file mode 100644
index 0000000000..f11f0ac888
--- /dev/null
+++ b/src/quickcontrols/universal/CheckDelegate.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.CheckDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ indicator: CheckIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered)
+ color: control.down ? control.Universal.listMediumColor :
+ control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.visualFocus || control.highlighted
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+
+ }
+}
diff --git a/src/quickcontrols/universal/ComboBox.qml b/src/quickcontrols/universal/ComboBox.qml
new file mode 100644
index 0000000000..9a812388aa
--- /dev/null
+++ b/src/quickcontrols/universal/ComboBox.qml
@@ -0,0 +1,124 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ComboBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: padding + (!control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+ rightPadding: padding + (control.mirrored || !indicator || !indicator.visible ? 0 : indicator.width + spacing)
+
+ Universal.theme: editable && activeFocus ? Universal.Light : undefined
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ indicator: ColorImage {
+ x: control.mirrored ? control.padding : control.width - width - control.padding
+ y: control.topPadding + (control.availableHeight - height) / 2
+ color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumHighColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/downarrow.png"
+
+ Rectangle {
+ z: -1
+ width: parent.width
+ height: parent.height
+ color: control.activeFocus ? control.Universal.accent :
+ control.pressed ? control.Universal.baseMediumLowColor :
+ control.hovered ? control.Universal.baseLowColor : "transparent"
+ visible: control.editable && !control.contentItem.hovered && (control.pressed || control.hovered)
+ opacity: control.activeFocus && !control.pressed ? 0.4 : 1.0
+ }
+ }
+
+ contentItem: T.TextField {
+ leftPadding: control.mirrored ? 1 : 12
+ rightPadding: control.mirrored ? 10 : 1
+ topPadding: 5 - control.topPadding
+ bottomPadding: 7 - control.bottomPadding
+
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: !control.enabled ? control.Universal.chromeDisabledLowColor :
+ control.editable && control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground
+ selectionColor: control.Universal.accent
+ selectedTextColor: control.Universal.chromeWhiteColor
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: Rectangle {
+ implicitWidth: 120
+ implicitHeight: 32
+
+ border.width: control.flat ? 0 : 2 // ComboBoxBorderThemeThickness
+ border.color: !control.enabled ? control.Universal.baseLowColor :
+ control.editable && control.activeFocus ? control.Universal.accent :
+ control.down ? control.Universal.baseMediumLowColor :
+ control.hovered ? control.Universal.baseMediumColor : control.Universal.baseMediumLowColor
+ color: !control.enabled ? control.Universal.baseLowColor :
+ control.down ? control.Universal.listMediumColor :
+ control.flat && control.hovered ? control.Universal.listLowColor :
+ control.editable && control.activeFocus ? control.Universal.background : control.Universal.altMediumLowColor
+ visible: !control.flat || control.pressed || control.hovered || control.visualFocus
+
+ Rectangle {
+ x: 2
+ y: 2
+ width: parent.width - 4
+ height: parent.height - 4
+
+ visible: control.visualFocus && !control.editable
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+ }
+
+ popup: T.Popup {
+ width: control.width
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
+ topMargin: 8
+ bottomMargin: 8
+
+ Universal.theme: control.Universal.theme
+ Universal.accent: control.Universal.accent
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ color: control.Universal.chromeMediumLowColor
+ border.color: control.Universal.chromeHighColor
+ border.width: 1 // FlyoutBorderThemeThickness
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/DelayButton.qml b/src/quickcontrols/universal/DelayButton.qml
new file mode 100644
index 0000000000..2b2cc83580
--- /dev/null
+++ b/src/quickcontrols/universal/DelayButton.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.DelayButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 8
+ verticalPadding: padding - 4
+
+ property bool useSystemFocusVisuals: true
+
+ transition: Transition {
+ NumberAnimation {
+ duration: control.delay * (control.pressed ? 1.0 - control.progress : 0.3 * control.progress)
+ }
+ }
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ elide: Text.ElideRight
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+
+ background: Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+
+ color: control.down ? control.Universal.baseMediumLowColor :
+ control.enabled && control.checked ? control.Universal.accent : control.Universal.baseLowColor
+
+ Rectangle {
+ visible: !control.checked
+ width: parent.width * control.progress
+ height: parent.height
+ color: control.Universal.accent
+ }
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+ visible: enabled && control.hovered
+ border.width: 2 // ButtonBorderThemeThickness
+ border.color: control.Universal.baseMediumLowColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/Dial.qml b/src/quickcontrols/universal/Dial.qml
new file mode 100644
index 0000000000..6f86b00722
--- /dev/null
+++ b/src/quickcontrols/universal/Dial.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Dial {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 100
+
+ x: control.width / 2 - width / 2
+ y: control.height / 2 - height / 2
+ width: Math.max(64, Math.min(control.width, control.height))
+ height: width
+ radius: width / 2
+ color: "transparent"
+ border.color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseMediumColor
+ border.width: 2
+ }
+
+ handle: Rectangle {
+ implicitWidth: 14
+ implicitHeight: 14
+
+ x: control.background.x + control.background.width / 2 - width / 2
+ y: control.background.y + control.background.height / 2 - height / 2
+
+ radius: width / 2
+ color: !control.enabled ? control.Universal.baseLowColor :
+ control.pressed ? control.Universal.baseMediumColor :
+ control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor
+
+ transform: [
+ Translate {
+ y: -control.background.height * 0.4 + control.handle.height / 2
+ },
+ Rotation {
+ angle: control.angle
+ origin.x: control.handle.width / 2
+ origin.y: control.handle.height / 2
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/universal/Dialog.qml b/src/quickcontrols/universal/Dialog.qml
new file mode 100644
index 0000000000..0ed4e673c7
--- /dev/null
+++ b/src/quickcontrols/universal/Dialog.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Dialog {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ padding: 24
+ verticalPadding: 18
+
+ background: Rectangle {
+ color: control.Universal.chromeMediumLowColor
+ border.color: control.Universal.chromeHighColor
+ border.width: 1 // FlyoutBorderThemeThickness
+ }
+
+ header: Label {
+ text: control.title
+ visible: control.title
+ elide: Label.ElideRight
+ topPadding: 18
+ leftPadding: 24
+ rightPadding: 24
+ // TODO: QPlatformTheme::TitleBarFont
+ font.pixelSize: 20
+ background: Rectangle {
+ x: 1; y: 1 // // FlyoutBorderThemeThickness
+ color: control.Universal.chromeMediumLowColor
+ width: parent.width - 2
+ height: parent.height - 1
+ }
+ }
+
+ footer: DialogButtonBox {
+ visible: count > 0
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/DialogButtonBox.qml b/src/quickcontrols/universal/DialogButtonBox.qml
new file mode 100644
index 0000000000..826a13efd3
--- /dev/null
+++ b/src/quickcontrols/universal/DialogButtonBox.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.DialogButtonBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ (control.count === 1 ? implicitContentWidth * 2 : implicitContentWidth) + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+ contentWidth: contentItem.contentWidth
+
+ spacing: 4
+ padding: 24
+ topPadding: position === T.DialogButtonBox.Footer ? 6 : 24
+ bottomPadding: position === T.DialogButtonBox.Header ? 6 : 24
+ alignment: count === 1 ? Qt.AlignRight : undefined
+
+ delegate: Button {
+ width: control.count === 1 ? control.availableWidth / 2 : undefined
+ }
+
+ contentItem: ListView {
+ implicitWidth: contentWidth
+ model: control.contentModel
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ snapMode: ListView.SnapToItem
+ }
+
+ background: Rectangle {
+ implicitHeight: 32
+ color: control.Universal.chromeMediumLowColor
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+ }
+}
diff --git a/src/quickcontrols/universal/Drawer.qml b/src/quickcontrols/universal/Drawer.qml
new file mode 100644
index 0000000000..4c4ff5d443
--- /dev/null
+++ b/src/quickcontrols/universal/Drawer.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Drawer {
+ id: control
+
+ parent: T.Overlay.overlay
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ topPadding: control.edge === Qt.BottomEdge
+ leftPadding: control.edge === Qt.RightEdge
+ rightPadding: control.edge === Qt.LeftEdge
+ bottomPadding: control.edge === Qt.TopEdge
+
+ enter: Transition { SmoothedAnimation { velocity: 5 } }
+ exit: Transition { SmoothedAnimation { velocity: 5 } }
+
+ background: Rectangle {
+ color: control.Universal.chromeMediumLowColor
+ Rectangle {
+ readonly property bool horizontal: control.edge === Qt.LeftEdge || control.edge === Qt.RightEdge
+ width: horizontal ? 1 : parent.width
+ height: horizontal ? parent.height : 1
+ color: control.Universal.chromeHighColor
+ x: control.edge === Qt.LeftEdge ? parent.width - 1 : 0
+ y: control.edge === Qt.TopEdge ? parent.height - 1 : 0
+ }
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/Frame.qml b/src/quickcontrols/universal/Frame.qml
new file mode 100644
index 0000000000..2e650d7913
--- /dev/null
+++ b/src/quickcontrols/universal/Frame.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Frame {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: "transparent"
+ border.color: control.Universal.chromeDisabledLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/GroupBox.qml b/src/quickcontrols/universal/GroupBox.qml
new file mode 100644
index 0000000000..b0b211bd95
--- /dev/null
+++ b/src/quickcontrols/universal/GroupBox.qml
@@ -0,0 +1,42 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.GroupBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitLabelWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ spacing: 12
+ padding: 12
+ topPadding: padding + (implicitLabelWidth > 0 ? implicitLabelHeight + spacing : 0)
+
+ label: Text {
+ x: control.leftPadding
+ width: control.availableWidth
+
+ text: control.title
+ font: control.font
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+
+ background: Rectangle {
+ y: control.topPadding - control.bottomPadding
+ width: parent.width
+ height: parent.height - control.topPadding + control.bottomPadding
+
+ color: "transparent"
+ border.color: control.Universal.chromeDisabledLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/HorizontalHeaderView.qml b/src/quickcontrols/universal/HorizontalHeaderView.qml
new file mode 100644
index 0000000000..878fb1e10e
--- /dev/null
+++ b/src/quickcontrols/universal/HorizontalHeaderView.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.HorizontalHeaderView {
+ id: control
+
+ implicitWidth: syncView ? syncView.width : 0
+ implicitHeight: contentHeight
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: text.implicitWidth + (cellPadding * 2)
+ implicitHeight: Math.max(control.height, text.implicitHeight + (cellPadding * 2))
+ color: control.Universal.background
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/ItemDelegate.qml b/src/quickcontrols/universal/ItemDelegate.qml
new file mode 100644
index 0000000000..ab999d6094
--- /dev/null
+++ b/src/quickcontrols/universal/ItemDelegate.qml
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.ItemDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered)
+ color: control.down ? control.Universal.listMediumColor :
+ control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.visualFocus || control.highlighted
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+
+ }
+}
diff --git a/src/quickcontrols/universal/Label.qml b/src/quickcontrols/universal/Label.qml
new file mode 100644
index 0000000000..e77f48d185
--- /dev/null
+++ b/src/quickcontrols/universal/Label.qml
@@ -0,0 +1,14 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Label {
+ id: control
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ linkColor: Universal.accent
+}
diff --git a/src/quickcontrols/universal/Menu.qml b/src/quickcontrols/universal/Menu.qml
new file mode 100644
index 0000000000..64dac0c4b8
--- /dev/null
+++ b/src/quickcontrols/universal/Menu.qml
@@ -0,0 +1,49 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Window
+
+T.Menu {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 0
+ overlap: 1
+
+ delegate: MenuItem { }
+
+ contentItem: ListView {
+ implicitHeight: contentHeight
+ model: control.contentModel
+ interactive: Window.window
+ ? contentHeight + control.topPadding + control.bottomPadding > Window.window.height
+ : false
+ clip: true
+ currentIndex: control.currentIndex
+
+ ScrollIndicator.vertical: ScrollIndicator {}
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+ color: control.Universal.chromeMediumLowColor
+ border.color: control.Universal.chromeHighColor
+ border.width: 1 // FlyoutBorderThemeThickness
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/MenuBar.qml b/src/quickcontrols/universal/MenuBar.qml
new file mode 100644
index 0000000000..1c0f4c6b2d
--- /dev/null
+++ b/src/quickcontrols/universal/MenuBar.qml
@@ -0,0 +1,30 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.MenuBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ delegate: MenuBarItem { }
+
+ contentItem: Row {
+ spacing: control.spacing
+ Repeater {
+ model: control.contentModel
+ }
+ }
+
+ background: Rectangle {
+ implicitHeight: 40
+ color: control.Universal.chromeMediumColor
+ }
+}
diff --git a/src/quickcontrols/universal/MenuBarItem.qml b/src/quickcontrols/universal/MenuBarItem.qml
new file mode 100644
index 0000000000..84dfb22fad
--- /dev/null
+++ b/src/quickcontrols/universal/MenuBarItem.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.MenuBarItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+ spacing: 12
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor
+ }
+
+ background: Rectangle {
+ implicitWidth: 40
+ implicitHeight: 40
+
+ color: !control.enabled ? control.Universal.baseLowColor :
+ control.down ? control.Universal.listMediumColor :
+ control.highlighted ? control.Universal.listLowColor : "transparent"
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+
+ visible: control.visualFocus
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/MenuItem.qml b/src/quickcontrols/universal/MenuItem.qml
new file mode 100644
index 0000000000..00b9d16228
--- /dev/null
+++ b/src/quickcontrols/universal/MenuItem.qml
@@ -0,0 +1,81 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.MenuItem {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+ spacing: 12
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: !enabled ? Universal.baseLowColor : Universal.baseHighColor
+
+ contentItem: IconLabel {
+ readonly property real arrowPadding: control.subMenu && control.arrow ? control.arrow.width + control.spacing : 0
+ readonly property real indicatorPadding: control.checkable && control.indicator ? control.indicator.width + control.spacing : 0
+ leftPadding: !control.mirrored ? indicatorPadding : arrowPadding
+ rightPadding: control.mirrored ? indicatorPadding : arrowPadding
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: !control.enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor
+ }
+
+ arrow: ColorImage {
+ x: control.mirrored ? control.leftPadding : control.width - width - control.rightPadding
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.subMenu
+ mirror: control.mirrored
+ color: !enabled ? control.Universal.baseLowColor : control.Universal.baseHighColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/rightarrow.png"
+ }
+
+ indicator: ColorImage {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+
+ visible: control.checked
+ color: !control.enabled ? control.Universal.baseLowColor : control.down ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor
+ source: !control.checkable ? "" : "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png"
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 40
+
+ color: !control.enabled ? control.Universal.baseLowColor :
+ control.down ? control.Universal.listMediumColor :
+ control.highlighted ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+
+ Rectangle {
+ x: 1; y: 1
+ width: parent.width - 2
+ height: parent.height - 2
+
+ visible: control.visualFocus
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/MenuSeparator.qml b/src/quickcontrols/universal/MenuSeparator.qml
new file mode 100644
index 0000000000..dc814ef2fe
--- /dev/null
+++ b/src/quickcontrols/universal/MenuSeparator.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.MenuSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 12
+ topPadding: 9
+ bottomPadding: 10
+
+ contentItem: Rectangle {
+ implicitWidth: 188
+ implicitHeight: 1
+ color: control.Universal.baseMediumLowColor
+ }
+
+ background: Rectangle {
+ color: control.Universal.altMediumLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/Page.qml b/src/quickcontrols/universal/Page.qml
new file mode 100644
index 0000000000..7e2c69aa5b
--- /dev/null
+++ b/src/quickcontrols/universal/Page.qml
@@ -0,0 +1,23 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Page {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding,
+ implicitHeaderWidth,
+ implicitFooterWidth)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding
+ + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0)
+ + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0))
+
+ background: Rectangle {
+ color: control.Universal.background
+ }
+}
diff --git a/src/quickcontrols/universal/PageIndicator.qml b/src/quickcontrols/universal/PageIndicator.qml
new file mode 100644
index 0000000000..68147f6996
--- /dev/null
+++ b/src/quickcontrols/universal/PageIndicator.qml
@@ -0,0 +1,38 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.PageIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 7
+
+ delegate: Rectangle {
+ implicitWidth: 5
+ implicitHeight: 5
+
+ radius: width / 2
+ color: index === control.currentIndex ? control.Universal.baseMediumHighColor :
+ pressed ? control.Universal.baseMediumLowColor : control.Universal.baseLowColor
+
+ required property int index
+ }
+
+ contentItem: Row {
+ spacing: control.spacing
+
+ Repeater {
+ model: control.count
+ delegate: control.delegate
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/Pane.qml b/src/quickcontrols/universal/Pane.qml
new file mode 100644
index 0000000000..2f27979c4b
--- /dev/null
+++ b/src/quickcontrols/universal/Pane.qml
@@ -0,0 +1,21 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Pane {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.Universal.background
+ }
+}
diff --git a/src/quickcontrols/universal/Popup.qml b/src/quickcontrols/universal/Popup.qml
new file mode 100644
index 0000000000..5899919791
--- /dev/null
+++ b/src/quickcontrols/universal/Popup.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Popup {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ padding: 12
+
+ background: Rectangle {
+ color: control.Universal.chromeMediumLowColor
+ border.color: control.Universal.chromeHighColor
+ border.width: 1 // FlyoutBorderThemeThickness
+ }
+
+ T.Overlay.modal: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+
+ T.Overlay.modeless: Rectangle {
+ color: control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/ProgressBar.qml b/src/quickcontrols/universal/ProgressBar.qml
new file mode 100644
index 0000000000..803941f865
--- /dev/null
+++ b/src/quickcontrols/universal/ProgressBar.qml
@@ -0,0 +1,35 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.ProgressBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: ProgressBarImpl {
+ implicitHeight: 10
+
+ scale: control.mirrored ? -1 : 1
+ color: control.Universal.accent
+ progress: control.position
+ indeterminate: control.visible && control.indeterminate
+ }
+
+ background: Rectangle {
+ implicitWidth: 100
+ implicitHeight: 10
+ y: (control.height - height) / 2
+ height: 10
+
+ visible: !control.indeterminate
+ color: control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/README.md b/src/quickcontrols/universal/README.md
new file mode 100644
index 0000000000..8d02d18ba3
--- /dev/null
+++ b/src/quickcontrols/universal/README.md
@@ -0,0 +1,9 @@
+# Universal Style
+
+This style is based on the [Microsoft Universal Design Guidelines](https://dev.windows.com/design).
+
+The colors and metrics used all around the QML and C++ files originate from the Windows 10 SDK. The files are called **generic.xaml** and **themeresources.xml**, and they are located in the following folder:
+
+ \(Program Files)\Windows Kits\10\DesignTime\CommonConfiguration\Neutral\UAP\<SDK version>\Generic
+
+See also [XAML theme resources](https://msdn.microsoft.com/en-us/library/windows/apps/mt187274.aspx).
diff --git a/src/quickcontrols/universal/RadioButton.qml b/src/quickcontrols/universal/RadioButton.qml
new file mode 100644
index 0000000000..b7e594308b
--- /dev/null
+++ b/src/quickcontrols/universal/RadioButton.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.RadioButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 8
+
+ property bool useSystemFocusVisuals: true
+
+ indicator: RadioIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+}
diff --git a/src/quickcontrols/universal/RadioDelegate.qml b/src/quickcontrols/universal/RadioDelegate.qml
new file mode 100644
index 0000000000..9e9899d15a
--- /dev/null
+++ b/src/quickcontrols/universal/RadioDelegate.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.RadioDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ indicator: RadioIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered)
+ color: control.down ? control.Universal.listMediumColor :
+ control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.visualFocus || control.highlighted
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+
+ }
+}
diff --git a/src/quickcontrols/universal/RangeSlider.qml b/src/quickcontrols/universal/RangeSlider.qml
new file mode 100644
index 0000000000..cd85d930bb
--- /dev/null
+++ b/src/quickcontrols/universal/RangeSlider.qml
@@ -0,0 +1,76 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.RangeSlider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ first.implicitHandleWidth + leftPadding + rightPadding,
+ second.implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ first.implicitHandleHeight + topPadding + bottomPadding,
+ second.implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ first.handle: Rectangle {
+ implicitWidth: control.horizontal ? 8 : 24
+ implicitHeight: control.horizontal ? 24 : 8
+
+ x: control.leftPadding + (control.horizontal ? control.first.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.first.visualPosition * (control.availableHeight - height))
+
+ radius: 4
+ color: control.first.pressed ? control.Universal.chromeHighColor :
+ control.first.hovered ? control.Universal.chromeAltLowColor :
+ control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor
+ }
+
+ second.handle: Rectangle {
+ implicitWidth: control.horizontal ? 8 : 24
+ implicitHeight: control.horizontal ? 24 : 8
+
+ x: control.leftPadding + (control.horizontal ? control.second.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.second.visualPosition * (control.availableHeight - height))
+
+ radius: 4
+ color: control.second.pressed ? control.Universal.chromeHighColor :
+ control.second.hovered ? control.Universal.chromeAltLowColor :
+ control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor
+ }
+
+ background: Item {
+ implicitWidth: control.horizontal ? 200 : 18
+ implicitHeight: control.horizontal ? 18 : 200
+
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ width: control.horizontal ? control.availableWidth : implicitWidth
+ height: control.horizontal ? implicitHeight : control.availableHeight
+
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ Rectangle {
+ x: control.horizontal ? 0 : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : 0
+ width: control.horizontal ? parent.width : 2 // SliderBackgroundThemeHeight
+ height: control.vertical ? parent.height : 2 // SliderBackgroundThemeHeight
+
+ color: enabled && control.hovered && !control.pressed ? control.Universal.baseMediumColor :
+ control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor
+ }
+
+ Rectangle {
+ x: control.horizontal ? control.first.position * parent.width : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : control.second.visualPosition * parent.height
+ width: control.horizontal ? control.second.position * parent.width - control.first.position * parent.width : 2 // SliderBackgroundThemeHeight
+ height: control.vertical ? control.second.position * parent.height - control.first.position * parent.height : 2 // SliderBackgroundThemeHeight
+
+ color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/RoundButton.qml b/src/quickcontrols/universal/RoundButton.qml
new file mode 100644
index 0000000000..c2d0f9e823
--- /dev/null
+++ b/src/quickcontrols/universal/RoundButton.qml
@@ -0,0 +1,57 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.RoundButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 8
+ spacing: 8
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ property bool useSystemFocusVisuals: true
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ implicitWidth: 32
+ implicitHeight: 32
+
+ radius: control.radius
+ visible: !control.flat || control.down || control.checked || control.highlighted
+ color: control.down ? control.Universal.baseMediumLowColor :
+ control.enabled && (control.highlighted || control.checked) ? control.Universal.accent :
+ control.Universal.baseLowColor
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ radius: control.radius
+ color: "transparent"
+ visible: enabled && control.hovered
+ border.width: 2 // ButtonBorderThemeThickness
+ border.color: control.Universal.baseMediumLowColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/ScrollBar.qml b/src/quickcontrols/universal/ScrollBar.qml
new file mode 100644
index 0000000000..a5ab5fc762
--- /dev/null
+++ b/src/quickcontrols/universal/ScrollBar.qml
@@ -0,0 +1,61 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ScrollBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ visible: control.policy !== T.ScrollBar.AlwaysOff
+ minimumSize: orientation === Qt.Horizontal ? height / width : width / height
+
+ // TODO: arrows
+
+ contentItem: Rectangle {
+ implicitWidth: control.interactive ? 12 : 6
+ implicitHeight: control.interactive ? 12: 6
+
+ color: control.pressed ? control.Universal.baseMediumColor :
+ enabled && control.interactive && control.hovered ? control.Universal.baseMediumLowColor :
+ control.Universal.chromeHighColor
+ opacity: 0.0
+ }
+
+ background: Rectangle {
+ implicitWidth: control.interactive ? 12 : 6
+ implicitHeight: control.interactive ? 12: 6
+
+ color: control.Universal.chromeLowColor
+ visible: control.size < 1.0
+ opacity: 0.0
+ }
+
+ states: [
+ State {
+ name: "active"
+ when: control.policy === T.ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "active"
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 1.0 }
+ },
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PropertyAction{ targets: [control.contentItem, control.background]; property: "opacity"; value: 1.0 }
+ PauseAnimation { duration: 3000 }
+ NumberAnimation { targets: [control.contentItem, control.background]; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+}
diff --git a/src/quickcontrols/universal/ScrollIndicator.qml b/src/quickcontrols/universal/ScrollIndicator.qml
new file mode 100644
index 0000000000..1df2163498
--- /dev/null
+++ b/src/quickcontrols/universal/ScrollIndicator.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ contentItem: Rectangle {
+ implicitWidth: 6
+ implicitHeight: 6
+
+ color: control.Universal.baseMediumLowColor
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: [
+ State {
+ name: "active"
+ when: control.active
+ }
+ ]
+
+ transitions: [
+ Transition {
+ to: "active"
+ NumberAnimation { target: control.contentItem; property: "opacity"; to: 1.0 }
+ },
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 5000 }
+ NumberAnimation { target: control.contentItem; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/quickcontrols/universal/ScrollView.qml b/src/quickcontrols/universal/ScrollView.qml
new file mode 100644
index 0000000000..60789313c9
--- /dev/null
+++ b/src/quickcontrols/universal/ScrollView.qml
@@ -0,0 +1,31 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: control.topPadding
+ height: control.availableHeight
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: control.leftPadding
+ y: control.height - height
+ width: control.availableWidth
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/universal/SelectionRectangle.qml b/src/quickcontrols/universal/SelectionRectangle.qml
new file mode 100644
index 0000000000..e7b99852da
--- /dev/null
+++ b/src/quickcontrols/universal/SelectionRectangle.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: handle
+ bottomRightHandle: handle
+
+ Component {
+ id: handle
+ Rectangle {
+ implicitWidth: 8
+ implicitHeight: 24
+ radius: 4
+ color: tapHandler.pressed || SelectionRectangle.dragging ? control.Universal.chromeHighColor :
+ hoverHandler.hovered ? control.Universal.chromeAltLowColor :
+ control.Universal.accent
+ visible: control.active
+
+ property Item control: SelectionRectangle.control
+
+ HoverHandler {
+ id: hoverHandler
+ }
+
+ TapHandler {
+ id: tapHandler
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/Slider.qml b/src/quickcontrols/universal/Slider.qml
new file mode 100644
index 0000000000..305c5c321f
--- /dev/null
+++ b/src/quickcontrols/universal/Slider.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.Slider {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitHandleWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitHandleHeight + topPadding + bottomPadding)
+
+ padding: 6
+
+ property bool useSystemFocusVisuals: true
+
+ handle: Rectangle {
+ implicitWidth: control.horizontal ? 8 : 24
+ implicitHeight: control.horizontal ? 24 : 8
+
+ x: control.leftPadding + (control.horizontal ? control.visualPosition * (control.availableWidth - width) : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : control.visualPosition * (control.availableHeight - height))
+
+ radius: 4
+ color: control.pressed ? control.Universal.chromeHighColor :
+ control.enabled ? control.hovered ? control.Universal.chromeAltLowColor :
+ control.Universal.accent : control.Universal.chromeDisabledHighColor
+ }
+
+ background: Item {
+ implicitWidth: control.horizontal ? 200 : 18
+ implicitHeight: control.horizontal ? 18 : 200
+
+ x: control.leftPadding + (control.horizontal ? 0 : (control.availableWidth - width) / 2)
+ y: control.topPadding + (control.horizontal ? (control.availableHeight - height) / 2 : 0)
+ width: control.horizontal ? control.availableWidth : implicitWidth
+ height: control.horizontal ? implicitHeight : control.availableHeight
+
+ scale: control.horizontal && control.mirrored ? -1 : 1
+
+ Rectangle {
+ x: control.horizontal ? 0 : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : 0
+ width: control.horizontal ? parent.width : 2 // SliderTrackThemeHeight
+ height: !control.horizontal ? parent.height : 2 // SliderTrackThemeHeight
+
+ color: enabled && control.hovered && !control.pressed ? control.Universal.baseMediumColor :
+ control.enabled ? control.Universal.baseMediumLowColor : control.Universal.chromeDisabledHighColor
+ }
+
+ Rectangle {
+ x: control.horizontal ? 0 : (parent.width - width) / 2
+ y: control.horizontal ? (parent.height - height) / 2 : control.visualPosition * parent.height
+ width: control.horizontal ? control.position * parent.width : 2 // SliderTrackThemeHeight
+ height: !control.horizontal ? control.position * parent.height : 2 // SliderTrackThemeHeight
+
+ color: control.enabled ? control.Universal.accent : control.Universal.chromeDisabledHighColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/SpinBox.qml b/src/quickcontrols/universal/SpinBox.qml
new file mode 100644
index 0000000000..07721c8712
--- /dev/null
+++ b/src/quickcontrols/universal/SpinBox.qml
@@ -0,0 +1,114 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.SpinBox {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentItem.implicitWidth + 16 +
+ up.implicitIndicatorWidth +
+ down.implicitIndicatorWidth)
+ implicitHeight: Math.max(implicitContentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight,
+ up.implicitIndicatorHeight,
+ down.implicitIndicatorHeight)
+
+ // TextControlThemePadding + 2 (border)
+ padding: 12
+ topPadding: padding - 7
+ leftPadding: padding + (control.mirrored ? (up.indicator ? up.indicator.width : 0) : (down.indicator ? down.indicator.width : 0))
+ rightPadding: padding - 4 + (control.mirrored ? (down.indicator ? down.indicator.width : 0) : (up.indicator ? up.indicator.width : 0))
+ bottomPadding: padding - 5
+
+ Universal.theme: activeFocus ? Universal.Light : undefined
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextInput {
+ text: control.displayText
+
+ font: control.font
+ color: !enabled ? control.Universal.chromeDisabledLowColor :
+ activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.foreground
+ selectionColor: control.Universal.accent
+ selectedTextColor: control.Universal.chromeWhiteColor
+ horizontalAlignment: Qt.AlignHCenter
+ verticalAlignment: TextInput.AlignVCenter
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+ }
+
+ up.indicator: Item {
+ implicitWidth: 28
+ height: control.height + 4
+ y: -2
+ x: control.mirrored ? 0 : control.width - width
+
+ Rectangle {
+ x: 2; y: 4
+ width: parent.width - 4
+ height: parent.height - 8
+ color: control.activeFocus ? control.Universal.accent :
+ control.up.pressed ? control.Universal.baseMediumLowColor :
+ control.up.hovered ? control.Universal.baseLowColor : "transparent"
+ visible: control.up.pressed || control.up.hovered
+ opacity: control.activeFocus && !control.up.pressed ? 0.4 : 1.0
+ }
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ color: !enabled ? control.Universal.chromeDisabledLowColor :
+ control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "left" : "right") + "arrow.png"
+ }
+ }
+
+ down.indicator: Item {
+ implicitWidth: 28
+ height: control.height + 4
+ y: -2
+ x: control.mirrored ? control.width - width : 0
+
+ Rectangle {
+ x: 2; y: 4
+ width: parent.width - 4
+ height: parent.height - 8
+ color: control.activeFocus ? control.Universal.accent :
+ control.down.pressed ? control.Universal.baseMediumLowColor :
+ control.down.hovered ? control.Universal.baseLowColor : "transparent"
+ visible: control.down.pressed || control.down.hovered
+ opacity: control.activeFocus && !control.down.pressed ? 0.4 : 1.0
+ }
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ color: !enabled ? control.Universal.chromeDisabledLowColor :
+ control.activeFocus ? control.Universal.chromeBlackHighColor : control.Universal.baseHighColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/" + (control.mirrored ? "right" : "left") + "arrow.png"
+ }
+ }
+
+ background: Rectangle {
+ implicitWidth: 60 + 28 // TextControlThemeMinWidth - 4 (border)
+ implicitHeight: 28 // TextControlThemeMinHeight - 4 (border)
+
+ border.width: 2 // TextControlBorderThemeThickness
+ border.color: !control.enabled ? control.Universal.baseLowColor :
+ control.activeFocus ? control.Universal.accent :
+ control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor
+ color: control.enabled ? control.Universal.background : control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/SplitView.qml b/src/quickcontrols/universal/SplitView.qml
new file mode 100644
index 0000000000..e18169db6a
--- /dev/null
+++ b/src/quickcontrols/universal/SplitView.qml
@@ -0,0 +1,22 @@
+// Copyright (C) 2018 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.SplitView {
+ id: control
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ handle: Rectangle {
+ implicitWidth: control.orientation === Qt.Horizontal ? 6 : control.width
+ implicitHeight: control.orientation === Qt.Horizontal ? control.height : 6
+ color: T.SplitHandle.pressed ? control.Universal.baseMediumColor
+ : (enabled && T.SplitHandle.hovered ? control.Universal.baseMediumLowColor : control.Universal.chromeHighColor)
+ }
+}
diff --git a/src/quickcontrols/universal/StackView.qml b/src/quickcontrols/universal/StackView.qml
new file mode 100644
index 0000000000..b5d568f98d
--- /dev/null
+++ b/src/quickcontrols/universal/StackView.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.StackView {
+ id: control
+
+ popEnter: Transition {
+ ParallelAnimation {
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint }
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * -control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+ }
+
+ popExit: Transition {
+ NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint }
+ }
+
+ pushEnter: Transition {
+ ParallelAnimation {
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint }
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+ }
+
+ pushExit: Transition {
+ NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint }
+ }
+
+ replaceEnter: Transition {
+ ParallelAnimation {
+ NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 200; easing.type: Easing.InQuint }
+ NumberAnimation { property: "x"; from: (control.mirrored ? -0.3 : 0.3) * control.width; to: 0; duration: 400; easing.type: Easing.OutCubic }
+ }
+ }
+
+ replaceExit: Transition {
+ NumberAnimation { property: "opacity"; from: 1; to: 0; duration: 200; easing.type: Easing.OutQuint }
+ }
+}
diff --git a/src/quickcontrols/universal/SwipeDelegate.qml b/src/quickcontrols/universal/SwipeDelegate.qml
new file mode 100644
index 0000000000..0bb2367ca7
--- /dev/null
+++ b/src/quickcontrols/universal/SwipeDelegate.qml
@@ -0,0 +1,59 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.SwipeDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ swipe.transition: Transition { SmoothedAnimation { velocity: 3; easing.type: Easing.InOutCubic } }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ color: control.Universal.background
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ color: control.down ? control.Universal.listMediumColor :
+ enabled && control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.visualFocus || control.highlighted
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/Switch.qml b/src/quickcontrols/universal/Switch.qml
new file mode 100644
index 0000000000..70de360bde
--- /dev/null
+++ b/src/quickcontrols/universal/Switch.qml
@@ -0,0 +1,41 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.Switch {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ padding: 5
+ spacing: 8
+
+ property bool useSystemFocusVisuals: true
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.width - width - control.rightPadding : control.leftPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: Text {
+ leftPadding: control.indicator && !control.mirrored ? control.indicator.width + control.spacing : 0
+ rightPadding: control.indicator && control.mirrored ? control.indicator.width + control.spacing : 0
+
+ text: control.text
+ font: control.font
+ elide: Text.ElideRight
+ verticalAlignment: Text.AlignVCenter
+
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+}
diff --git a/src/quickcontrols/universal/SwitchDelegate.qml b/src/quickcontrols/universal/SwitchDelegate.qml
new file mode 100644
index 0000000000..18a55e9cd9
--- /dev/null
+++ b/src/quickcontrols/universal/SwitchDelegate.qml
@@ -0,0 +1,63 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.SwitchDelegate {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: 12
+
+ padding: 12
+ topPadding: padding - 1
+ bottomPadding: padding + 1
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ indicator: SwitchIndicator {
+ x: control.text ? (control.mirrored ? control.leftPadding : control.width - width - control.rightPadding) : control.leftPadding + (control.availableWidth - width) / 2
+ y: control.topPadding + (control.availableHeight - height) / 2
+ control: control
+ }
+
+ contentItem: IconLabel {
+ leftPadding: !control.mirrored ? 0 : control.indicator.width + control.spacing
+ rightPadding: control.mirrored ? 0 : control.indicator.width + control.spacing
+
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+ alignment: control.display === IconLabel.IconOnly || control.display === IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ visible: enabled && (control.down || control.highlighted || control.visualFocus || control.hovered)
+ color: control.down ? control.Universal.listMediumColor :
+ control.hovered ? control.Universal.listLowColor : control.Universal.altMediumLowColor
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: control.visualFocus || control.highlighted
+ color: control.Universal.accent
+ opacity: control.Universal.theme === Universal.Light ? 0.4 : 0.6
+ }
+
+ }
+}
diff --git a/src/quickcontrols/universal/TabBar.qml b/src/quickcontrols/universal/TabBar.qml
new file mode 100644
index 0000000000..c06aaaf541
--- /dev/null
+++ b/src/quickcontrols/universal/TabBar.qml
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.TabBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ contentItem: ListView {
+ model: control.contentModel
+ currentIndex: control.currentIndex
+
+ spacing: control.spacing
+ orientation: ListView.Horizontal
+ boundsBehavior: Flickable.StopAtBounds
+ flickableDirection: Flickable.AutoFlickIfNeeded
+ snapMode: ListView.SnapToItem
+
+ highlightMoveDuration: 100
+ highlightRangeMode: ListView.ApplyRange
+ preferredHighlightBegin: 48
+ preferredHighlightEnd: width - 48
+ }
+
+ background: Rectangle {
+ implicitWidth: 200
+ implicitHeight: 48
+ color: control.Universal.background
+ }
+}
diff --git a/src/quickcontrols/universal/TabButton.qml b/src/quickcontrols/universal/TabButton.qml
new file mode 100644
index 0000000000..7c8080301e
--- /dev/null
+++ b/src/quickcontrols/universal/TabButton.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.TabButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 12 // PivotItemMargin
+ spacing: 8
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground,
+ control.checked || control.down || control.hovered ? 1.0 : 0.2)
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(enabled && control.hovered ? control.Universal.baseMediumHighColor : control.Universal.foreground,
+ control.checked || control.down || (enabled && control.hovered) ? 1.0 : 0.2)
+ }
+}
diff --git a/src/quickcontrols/universal/TextArea.qml b/src/quickcontrols/universal/TextArea.qml
new file mode 100644
index 0000000000..8a3cdd1119
--- /dev/null
+++ b/src/quickcontrols/universal/TextArea.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.TextArea {
+ id: control
+
+ implicitWidth: Math.max(contentWidth + leftPadding + rightPadding,
+ implicitBackgroundWidth + leftInset + rightInset,
+ placeholder.implicitWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(contentHeight + topPadding + bottomPadding,
+ implicitBackgroundHeight + topInset + bottomInset,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ // TextControlThemePadding + 2 (border)
+ padding: 12
+ topPadding: padding - 7
+ rightPadding: padding - 4
+ bottomPadding: padding - 5
+
+ Universal.theme: activeFocus ? Universal.Light : undefined
+
+ color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground
+ selectionColor: Universal.accent
+ selectedTextColor: Universal.chromeWhiteColor
+ placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor :
+ activeFocus ? Universal.chromeBlackMediumLowColor :
+ Universal.baseMediumColor
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ verticalAlignment: control.verticalAlignment
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitWidth: 60 // TextControlThemeMinWidth - 4 (border)
+ implicitHeight: 28 // TextControlThemeMinHeight - 4 (border)
+
+ border.width: 2 // TextControlBorderThemeThickness
+ border.color: !control.enabled ? control.Universal.baseLowColor :
+ control.activeFocus ? control.Universal.accent :
+ control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor
+ color: control.enabled ? control.Universal.background : control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/TextField.qml b/src/quickcontrols/universal/TextField.qml
new file mode 100644
index 0000000000..fb20779156
--- /dev/null
+++ b/src/quickcontrols/universal/TextField.qml
@@ -0,0 +1,60 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.TextField {
+ id: control
+
+ implicitWidth: implicitBackgroundWidth + leftInset + rightInset
+ || Math.max(contentWidth, placeholder.implicitWidth) + leftPadding + rightPadding
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding,
+ placeholder.implicitHeight + topPadding + bottomPadding)
+
+ // TextControlThemePadding + 2 (border)
+ padding: 12
+ topPadding: padding - 7
+ rightPadding: padding - 4
+ bottomPadding: padding - 5
+
+ Universal.theme: activeFocus ? Universal.Light : undefined
+
+ color: !enabled ? Universal.chromeDisabledLowColor : Universal.foreground
+ selectionColor: Universal.accent
+ selectedTextColor: Universal.chromeWhiteColor
+ placeholderTextColor: !enabled ? Universal.chromeDisabledLowColor :
+ activeFocus ? Universal.chromeBlackMediumLowColor :
+ Universal.baseMediumColor
+ verticalAlignment: TextInput.AlignVCenter
+
+ PlaceholderText {
+ id: placeholder
+ x: control.leftPadding
+ y: control.topPadding
+ width: control.width - (control.leftPadding + control.rightPadding)
+ height: control.height - (control.topPadding + control.bottomPadding)
+
+ text: control.placeholderText
+ font: control.font
+ color: control.placeholderTextColor
+ visible: !control.length && !control.preeditText && (!control.activeFocus || control.horizontalAlignment !== Qt.AlignHCenter)
+ verticalAlignment: control.verticalAlignment
+ elide: Text.ElideRight
+ renderType: control.renderType
+ }
+
+ background: Rectangle {
+ implicitWidth: 60 // TextControlThemeMinWidth - 4 (border)
+ implicitHeight: 28 // TextControlThemeMinHeight - 4 (border)
+
+ border.width: 2 // TextControlBorderThemeThickness
+ border.color: !control.enabled ? control.Universal.baseLowColor :
+ control.activeFocus ? control.Universal.accent :
+ control.hovered ? control.Universal.baseMediumColor : control.Universal.chromeDisabledLowColor
+ color: control.enabled ? control.Universal.background : control.Universal.baseLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/ToolBar.qml b/src/quickcontrols/universal/ToolBar.qml
new file mode 100644
index 0000000000..33aa490c08
--- /dev/null
+++ b/src/quickcontrols/universal/ToolBar.qml
@@ -0,0 +1,20 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ToolBar {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ background: Rectangle {
+ implicitHeight: 48 // AppBarThemeCompactHeight
+ color: control.Universal.chromeMediumColor
+ }
+}
diff --git a/src/quickcontrols/universal/ToolButton.qml b/src/quickcontrols/universal/ToolButton.qml
new file mode 100644
index 0000000000..08c346b99e
--- /dev/null
+++ b/src/quickcontrols/universal/ToolButton.qml
@@ -0,0 +1,50 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+T.ToolButton {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 6
+ spacing: 8
+
+ icon.width: 20
+ icon.height: 20
+ icon.color: Color.transparent(Universal.foreground, enabled ? 1.0 : 0.2)
+
+ property bool useSystemFocusVisuals: true
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+
+ background: Rectangle {
+ implicitWidth: 68
+ implicitHeight: 48 // AppBarThemeCompactHeight
+
+ color: control.enabled && (control.highlighted || control.checked) ? control.Universal.accent : "transparent"
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+ visible: enabled && (control.down || control.hovered)
+ color: control.down ? control.Universal.listMediumColor : control.Universal.listLowColor
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/ToolSeparator.qml b/src/quickcontrols/universal/ToolSeparator.qml
new file mode 100644
index 0000000000..2d6cc9a3cc
--- /dev/null
+++ b/src/quickcontrols/universal/ToolSeparator.qml
@@ -0,0 +1,26 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ToolSeparator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ leftPadding: vertical ? 16 : 12
+ rightPadding: vertical ? 15 : 12
+ topPadding: vertical ? 12 : 16
+ bottomPadding: vertical ? 12 : 15
+
+ contentItem: Rectangle {
+ implicitWidth: control.vertical ? 1 : 20
+ implicitHeight: control.vertical ? 20 : 1
+ color: control.Universal.baseMediumLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/ToolTip.qml b/src/quickcontrols/universal/ToolTip.qml
new file mode 100644
index 0000000000..af1d49586e
--- /dev/null
+++ b/src/quickcontrols/universal/ToolTip.qml
@@ -0,0 +1,39 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+T.ToolTip {
+ id: control
+
+ x: parent ? (parent.width - implicitWidth) / 2 : 0
+ y: -implicitHeight - 16
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ margins: 8
+ padding: 8
+ topPadding: padding - 3
+ bottomPadding: padding - 1
+
+ closePolicy: T.Popup.CloseOnEscape | T.Popup.CloseOnPressOutsideParent | T.Popup.CloseOnReleaseOutsideParent
+
+ contentItem: Text {
+ text: control.text
+ font: control.font
+ wrapMode: Text.Wrap
+ opacity: enabled ? 1.0 : 0.2
+ color: control.Universal.foreground
+ }
+
+ background: Rectangle {
+ color: control.Universal.chromeMediumLowColor
+ border.color: control.Universal.chromeHighColor
+ border.width: 1 // ToolTipBorderThemeThickness
+ }
+}
diff --git a/src/quickcontrols/universal/Tumbler.qml b/src/quickcontrols/universal/Tumbler.qml
new file mode 100644
index 0000000000..03b5fcca63
--- /dev/null
+++ b/src/quickcontrols/universal/Tumbler.qml
@@ -0,0 +1,45 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.impl
+
+T.Tumbler {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ delegate: Text {
+ text: modelData
+ font: control.font
+ color: control.Universal.foreground
+ opacity: (1.0 - Math.abs(Tumbler.displacement) / (control.visibleItemCount / 2)) * (control.enabled ? 1 : 0.6)
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ required property var modelData
+ required property int index
+ }
+
+ contentItem: TumblerView {
+ implicitWidth: 60
+ implicitHeight: 200
+ model: control.model
+ delegate: control.delegate
+ path: Path {
+ startX: control.contentItem.width / 2
+ startY: -control.contentItem.delegateHeight / 2
+ PathLine {
+ x: control.contentItem.width / 2
+ y: (control.visibleItemCount + 1) * control.contentItem.delegateHeight - control.contentItem.delegateHeight / 2
+ }
+ }
+
+ property real delegateHeight: control.availableHeight / control.visibleItemCount
+ }
+}
diff --git a/src/quickcontrols/universal/VerticalHeaderView.qml b/src/quickcontrols/universal/VerticalHeaderView.qml
new file mode 100644
index 0000000000..189bed0906
--- /dev/null
+++ b/src/quickcontrols/universal/VerticalHeaderView.qml
@@ -0,0 +1,36 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+import QtQuick.Controls.Universal.impl
+
+T.VerticalHeaderView {
+ id: control
+
+ implicitWidth: contentWidth
+ implicitHeight: syncView ? syncView.height : 0
+
+ delegate: Rectangle {
+ // Qt6: add cellPadding (and font etc) as public API in headerview
+ readonly property real cellPadding: 8
+
+ implicitWidth: Math.max(control.width, text.implicitWidth + (cellPadding * 2))
+ implicitHeight: text.implicitHeight + (cellPadding * 2)
+ color: control.Universal.background
+
+ Text {
+ id: text
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole]
+ : model[control.textRole])
+ : modelData
+ width: parent.width
+ height: parent.height
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: Color.transparent(control.Universal.foreground, enabled ? 1.0 : 0.2)
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/images/checkmark.png b/src/quickcontrols/universal/images/checkmark.png
new file mode 100644
index 0000000000..e2aae6fe0f
--- /dev/null
+++ b/src/quickcontrols/universal/images/checkmark.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/checkmark@2x.png b/src/quickcontrols/universal/images/checkmark@2x.png
new file mode 100644
index 0000000000..0df4159a7c
--- /dev/null
+++ b/src/quickcontrols/universal/images/checkmark@2x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/checkmark@3x.png b/src/quickcontrols/universal/images/checkmark@3x.png
new file mode 100644
index 0000000000..43466cbcb6
--- /dev/null
+++ b/src/quickcontrols/universal/images/checkmark@3x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/checkmark@4x.png b/src/quickcontrols/universal/images/checkmark@4x.png
new file mode 100644
index 0000000000..7a47bd2159
--- /dev/null
+++ b/src/quickcontrols/universal/images/checkmark@4x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/downarrow.png b/src/quickcontrols/universal/images/downarrow.png
new file mode 100644
index 0000000000..b66e2efc22
--- /dev/null
+++ b/src/quickcontrols/universal/images/downarrow.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/downarrow@2x.png b/src/quickcontrols/universal/images/downarrow@2x.png
new file mode 100644
index 0000000000..a704376c8f
--- /dev/null
+++ b/src/quickcontrols/universal/images/downarrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/downarrow@3x.png b/src/quickcontrols/universal/images/downarrow@3x.png
new file mode 100644
index 0000000000..3b6d55ab4c
--- /dev/null
+++ b/src/quickcontrols/universal/images/downarrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/downarrow@4x.png b/src/quickcontrols/universal/images/downarrow@4x.png
new file mode 100644
index 0000000000..818c6b24ff
--- /dev/null
+++ b/src/quickcontrols/universal/images/downarrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/leftarrow.png b/src/quickcontrols/universal/images/leftarrow.png
new file mode 100644
index 0000000000..0153ccd421
--- /dev/null
+++ b/src/quickcontrols/universal/images/leftarrow.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/leftarrow@2x.png b/src/quickcontrols/universal/images/leftarrow@2x.png
new file mode 100644
index 0000000000..fa692d5b0f
--- /dev/null
+++ b/src/quickcontrols/universal/images/leftarrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/leftarrow@3x.png b/src/quickcontrols/universal/images/leftarrow@3x.png
new file mode 100644
index 0000000000..06b0207a60
--- /dev/null
+++ b/src/quickcontrols/universal/images/leftarrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/leftarrow@4x.png b/src/quickcontrols/universal/images/leftarrow@4x.png
new file mode 100644
index 0000000000..1049f616e4
--- /dev/null
+++ b/src/quickcontrols/universal/images/leftarrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/rightarrow.png b/src/quickcontrols/universal/images/rightarrow.png
new file mode 100644
index 0000000000..b24d117d79
--- /dev/null
+++ b/src/quickcontrols/universal/images/rightarrow.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/rightarrow@2x.png b/src/quickcontrols/universal/images/rightarrow@2x.png
new file mode 100644
index 0000000000..80aca7c18f
--- /dev/null
+++ b/src/quickcontrols/universal/images/rightarrow@2x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/rightarrow@3x.png b/src/quickcontrols/universal/images/rightarrow@3x.png
new file mode 100644
index 0000000000..ba01724065
--- /dev/null
+++ b/src/quickcontrols/universal/images/rightarrow@3x.png
Binary files differ
diff --git a/src/quickcontrols/universal/images/rightarrow@4x.png b/src/quickcontrols/universal/images/rightarrow@4x.png
new file mode 100644
index 0000000000..21f7ed4d15
--- /dev/null
+++ b/src/quickcontrols/universal/images/rightarrow@4x.png
Binary files differ
diff --git a/src/quickcontrols/universal/impl/CMakeLists.txt b/src/quickcontrols/universal/impl/CMakeLists.txt
new file mode 100644
index 0000000000..078e42e217
--- /dev/null
+++ b/src/quickcontrols/universal/impl/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2universalstyleimplplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "CheckIndicator.qml"
+ "RadioIndicator.qml"
+ "SwitchIndicator.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2universalstyleimplplugin
+ URI "QtQuick.Controls.Universal.impl"
+ VERSION "${PROJECT_VERSION}"
+ PAST_MAJOR_VERSIONS 2
+ CLASS_NAME QtQuickControls2UniversalStyleImplPlugin
+ DEPENDENCIES
+ QtQuick/auto
+ PLUGIN_TARGET qtquickcontrols2universalstyleimplplugin
+ NO_PLUGIN_OPTIONAL
+ SOURCES
+ qquickuniversalbusyindicator.cpp qquickuniversalbusyindicator_p.h
+ qquickuniversalfocusrectangle.cpp qquickuniversalfocusrectangle_p.h
+ qquickuniversalprogressbar.cpp qquickuniversalprogressbar_p.h
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::Gui
+ Qt::QmlPrivate
+ Qt::QuickControls2ImplPrivate
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
diff --git a/src/quickcontrols/universal/impl/CheckIndicator.qml b/src/quickcontrols/universal/impl/CheckIndicator.qml
new file mode 100644
index 0000000000..b78e57570d
--- /dev/null
+++ b/src/quickcontrols/universal/impl/CheckIndicator.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.impl
+import QtQuick.Controls.Universal
+
+Rectangle {
+ id: indicator
+ implicitWidth: 20
+ implicitHeight: 20
+
+ color: !control.enabled ? "transparent" :
+ control.down && !partiallyChecked ? control.Universal.baseMediumColor :
+ control.checkState === Qt.Checked ? control.Universal.accent : "transparent"
+ border.color: !control.enabled ? control.Universal.baseLowColor :
+ control.down ? control.Universal.baseMediumColor :
+ control.checked ? control.Universal.accent : control.Universal.baseMediumHighColor
+ border.width: 2 // CheckBoxBorderThemeThickness
+
+ property Item control
+ readonly property bool partiallyChecked: control.checkState === Qt.PartiallyChecked
+
+ ColorImage {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+
+ visible: indicator.control.checkState === Qt.Checked
+ color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor : indicator.control.Universal.chromeWhiteColor
+ source: "qrc:/qt-project.org/imports/QtQuick/Controls/Universal/images/checkmark.png"
+ }
+
+ Rectangle {
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: indicator.partiallyChecked ? parent.width / 2 : parent.width
+ height: indicator.partiallyChecked ? parent.height / 2 : parent.height
+
+ visible: !indicator.control.pressed && enabled && indicator.control.hovered || indicator.partiallyChecked
+ color: !indicator.partiallyChecked ? "transparent" :
+ !indicator.control.enabled ? indicator.control.Universal.baseLowColor :
+ indicator.control.down ? indicator.control.Universal.baseMediumColor :
+ indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor
+ border.width: indicator.partiallyChecked ? 0 : 2 // CheckBoxBorderThemeThickness
+ border.color: indicator.control.Universal.baseMediumLowColor
+ }
+}
diff --git a/src/quickcontrols/universal/impl/RadioIndicator.qml b/src/quickcontrols/universal/impl/RadioIndicator.qml
new file mode 100644
index 0000000000..73fc2e964f
--- /dev/null
+++ b/src/quickcontrols/universal/impl/RadioIndicator.qml
@@ -0,0 +1,47 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.Universal
+
+Rectangle {
+ id: indicator
+ implicitWidth: 20
+ implicitHeight: 20
+ radius: width / 2
+ color: "transparent"
+ border.width: 2 // RadioButtonBorderThemeThickness
+ border.color: control.checked ? "transparent" :
+ !control.enabled ? control.Universal.baseLowColor :
+ control.down ? control.Universal.baseMediumColor :
+ control.hovered ? control.Universal.baseHighColor : control.Universal.baseMediumHighColor
+
+ property var control
+
+ Rectangle {
+ id: checkOuterEllipse
+ width: parent.width
+ height: parent.height
+
+ radius: width / 2
+ opacity: indicator.control.checked ? 1 : 0
+ color: "transparent"
+ border.width: 2 // RadioButtonBorderThemeThickness
+ border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor :
+ indicator.control.down ? indicator.control.Universal.baseMediumColor : indicator.control.Universal.accent
+ }
+
+ Rectangle {
+ id: checkGlyph
+ x: (parent.width - width) / 2
+ y: (parent.height - height) / 2
+ width: parent.width / 2
+ height: parent.height / 2
+
+ radius: width / 2
+ opacity: indicator.control.checked ? 1 : 0
+ color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor :
+ indicator.control.down ? indicator.control.Universal.baseMediumColor :
+ indicator.control.hovered ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor
+ }
+}
diff --git a/src/quickcontrols/universal/impl/SwitchIndicator.qml b/src/quickcontrols/universal/impl/SwitchIndicator.qml
new file mode 100644
index 0000000000..f88094becc
--- /dev/null
+++ b/src/quickcontrols/universal/impl/SwitchIndicator.qml
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls.Universal
+
+Item {
+ id: indicator
+ implicitWidth: 44
+ implicitHeight: 20
+
+ property T.AbstractButton control
+
+ Rectangle {
+ width: parent.width
+ height: parent.height
+
+ radius: 10
+ color: !indicator.control.enabled ? "transparent" :
+ indicator.control.pressed ? indicator.control.Universal.baseMediumColor :
+ indicator.control.checked ? indicator.control.Universal.accent : "transparent"
+ border.color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor :
+ indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.accent :
+ indicator.control.hovered && !indicator.control.checked && !indicator.control.pressed ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumColor
+ opacity: enabled && indicator.control.hovered && indicator.control.checked && !indicator.control.pressed ? (indicator.control.Universal.theme === Universal.Light ? 0.7 : 0.9) : 1.0
+ border.width: 2
+ }
+
+ Rectangle {
+ width: 10
+ height: 10
+ radius: 5
+
+ color: !indicator.control.enabled ? indicator.control.Universal.baseLowColor :
+ indicator.control.pressed || indicator.control.checked ? indicator.control.Universal.chromeWhiteColor :
+ indicator.control.hovered && !indicator.control.checked ? indicator.control.Universal.baseHighColor : indicator.control.Universal.baseMediumHighColor
+
+ x: Math.max(5, Math.min(parent.width - width - 5,
+ indicator.control.visualPosition * parent.width - (width / 2)))
+ y: (parent.height - height) / 2
+
+ Behavior on x {
+ enabled: !indicator.control.pressed
+ SmoothedAnimation { velocity: 200 }
+ }
+ }
+}
diff --git a/src/quickcontrols/universal/impl/qquickuniversalbusyindicator.cpp b/src/quickcontrols/universal/impl/qquickuniversalbusyindicator.cpp
new file mode 100644
index 0000000000..d0fdd925cd
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalbusyindicator.cpp
@@ -0,0 +1,220 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversalbusyindicator_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtCore/qeasingcurve.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int PhaseCount = 6;
+static const int Interval = 167;
+static const int TotalDuration = 4052;
+
+class QQuickUniversalBusyIndicatorNode : public QQuickAnimatedNode
+{
+public:
+ QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ struct Phase {
+ Phase() = default;
+ Phase(int d, qreal f, qreal t, QEasingCurve::Type c) : duration(d), from(f), to(t), curve(c) { }
+ int duration = 0;
+ qreal from = 0;
+ qreal to = 0;
+ QEasingCurve curve = QEasingCurve::Linear;
+ };
+
+ Phase m_phases[PhaseCount];
+};
+
+QQuickUniversalBusyIndicatorNode::QQuickUniversalBusyIndicatorNode(QQuickUniversalBusyIndicator *item)
+ : QQuickAnimatedNode(item)
+{
+ setLoopCount(Infinite);
+ setDuration(TotalDuration);
+ setCurrentTime(item->elapsed());
+
+ m_phases[0] = Phase(433, -110, 10, QEasingCurve::BezierSpline);
+ m_phases[1] = Phase(767, 10, 93, QEasingCurve::Linear );
+ m_phases[2] = Phase(417, 93, 205, QEasingCurve::BezierSpline);
+ m_phases[3] = Phase(400, 205, 357, QEasingCurve::BezierSpline);
+ m_phases[4] = Phase(766, 357, 439, QEasingCurve::Linear );
+ m_phases[5] = Phase(434, 439, 585, QEasingCurve::BezierSpline);
+
+ m_phases[0].curve.addCubicBezierSegment(QPointF(0.02, 0.33), QPointF(0.38, 0.77), QPointF(1.00, 1.00));
+ m_phases[2].curve.addCubicBezierSegment(QPointF(0.57, 0.17), QPointF(0.95, 0.75), QPointF(1.00, 1.00));
+ m_phases[3].curve.addCubicBezierSegment(QPointF(0.00, 0.19), QPointF(0.07, 0.72), QPointF(1.00, 1.00));
+ m_phases[5].curve.addCubicBezierSegment(QPointF(0.00, 0.00), QPointF(0.95, 0.37), QPointF(1.00, 1.00));
+}
+
+void QQuickUniversalBusyIndicatorNode::updateCurrentTime(int time)
+{
+ int nodeIndex = 0;
+ int count = childCount();
+ QSGTransformNode *transformNode = static_cast<QSGTransformNode *>(firstChild());
+ while (transformNode) {
+ Q_ASSERT(transformNode->type() == QSGNode::TransformNodeType);
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(transformNode->firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ int begin = nodeIndex * Interval;
+ int end = TotalDuration - (PhaseCount - nodeIndex - 1) * Interval;
+
+ bool visible = time >= begin && time <= end;
+ opacityNode->setOpacity(visible ? 1.0 : 0.0);
+
+ if (visible) {
+ int phaseIndex, remain = time, elapsed = 0;
+ for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) {
+ if (remain <= m_phases[phaseIndex].duration + begin)
+ break;
+ remain -= m_phases[phaseIndex].duration;
+ elapsed += m_phases[phaseIndex].duration;
+ }
+
+ const Phase &phase = m_phases[phaseIndex];
+
+ qreal from = phase.from - nodeIndex * count;
+ qreal to = phase.to - nodeIndex * count;
+ qreal pos = time - elapsed - begin;
+
+ qreal value = phase.curve.valueForProgress(pos / phase.duration);
+ qreal rotation = from + (to - from) * value;
+
+ QMatrix4x4 matrix;
+ matrix.rotate(rotation, 0, 0, 1);
+ transformNode->setMatrix(matrix);
+ }
+
+ transformNode = static_cast<QSGTransformNode *>(transformNode->nextSibling());
+ ++nodeIndex;
+ }
+}
+
+void QQuickUniversalBusyIndicatorNode::sync(QQuickItem *item)
+{
+ QQuickUniversalBusyIndicator *indicator = static_cast<QQuickUniversalBusyIndicator *>(item);
+ QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+
+ QMatrix4x4 matrix;
+ matrix.translate(item->width() / 2, item->height() / 2);
+ setMatrix(matrix);
+
+ qreal size = qMin(item->width(), item->height());
+ qreal diameter = size / 10.0;
+ qreal radius = diameter / 2;
+ qreal offset = (size - diameter * 2) / M_PI;
+ const QRectF rect(offset, offset, diameter, diameter);
+
+ int count = indicator->count();
+ QSGNode *transformNode = firstChild();
+ for (int i = 0; i < count; ++i) {
+ if (!transformNode) {
+ transformNode = new QSGTransformNode;
+ appendChildNode(transformNode);
+
+ QSGOpacityNode *opacityNode = new QSGOpacityNode;
+ transformNode->appendChildNode(opacityNode);
+
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ opacityNode->appendChildNode(rectNode);
+ }
+
+ QSGNode *opacityNode = transformNode->firstChild();
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(opacityNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ rectNode->setRect(rect);
+ rectNode->setColor(indicator->color());
+ rectNode->setRadius(radius);
+ rectNode->update();
+
+ transformNode = transformNode->nextSibling();
+ }
+
+ while (transformNode) {
+ QSGNode *nextSibling = transformNode->nextSibling();
+ delete transformNode;
+ transformNode = nextSibling;
+ }
+}
+
+QQuickUniversalBusyIndicator::QQuickUniversalBusyIndicator(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+int QQuickUniversalBusyIndicator::count() const
+{
+ return m_count;
+}
+
+void QQuickUniversalBusyIndicator::setCount(int count)
+{
+ if (m_count == count)
+ return;
+
+ m_count = count;
+ update();
+}
+
+QColor QQuickUniversalBusyIndicator::color() const
+{
+ return m_color;
+}
+
+void QQuickUniversalBusyIndicator::setColor(const QColor &color)
+{
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+int QQuickUniversalBusyIndicator::elapsed() const
+{
+ return m_elapsed;
+}
+
+void QQuickUniversalBusyIndicator::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ if (change == ItemVisibleHasChanged)
+ update();
+}
+
+QSGNode *QQuickUniversalBusyIndicator::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
+{
+ QQuickUniversalBusyIndicatorNode *node = static_cast<QQuickUniversalBusyIndicatorNode *>(oldNode);
+ if (isVisible() && width() > 0 && height() > 0) {
+ if (!node) {
+ node = new QQuickUniversalBusyIndicatorNode(this);
+ node->start();
+ }
+ node->sync(this);
+ } else {
+ m_elapsed = node ? node->currentTime() : 0;
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickuniversalbusyindicator_p.cpp"
diff --git a/src/quickcontrols/universal/impl/qquickuniversalbusyindicator_p.h b/src/quickcontrols/universal/impl/qquickuniversalbusyindicator_p.h
new file mode 100644
index 0000000000..1000bbab09
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalbusyindicator_p.h
@@ -0,0 +1,57 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKUNIVERSALBUSYINDICATOR_P_H
+#define QQUICKUNIVERSALBUSYINDICATOR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickitem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickUniversalBusyIndicator : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(int count READ count WRITE setCount FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ QML_NAMED_ELEMENT(BusyIndicatorImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickUniversalBusyIndicator(QQuickItem *parent = nullptr);
+
+ int count() const;
+ void setCount(int count);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ int elapsed() const;
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ int m_count = 5;
+ int m_elapsed = 0;
+ QColor m_color = Qt::black;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickUniversalBusyIndicator)
+
+#endif // QQUICKUNIVERSALBUSYINDICATOR_P_H
diff --git a/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle.cpp b/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle.cpp
new file mode 100644
index 0000000000..9b815b9147
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle.cpp
@@ -0,0 +1,53 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversalfocusrectangle_p.h"
+
+#include <QtGui/qpixmap.h>
+#include <QtGui/qpainter.h>
+#include <QtGui/qpixmapcache.h>
+#include <QtQuick/private/qquickitem_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QQuickUniversalFocusRectangle::QQuickUniversalFocusRectangle(QQuickItem *parent)
+ : QQuickPaintedItem(parent)
+{
+ QQuickItemPrivate::get(this)->setTransparentForPositioner(true);
+}
+
+void QQuickUniversalFocusRectangle::paint(QPainter *painter)
+{
+ if (!isVisible() || width() <= 0 || height() <= 0)
+ return;
+
+ QRect bounds = boundingRect().toAlignedRect();
+ const int boundsWidth = bounds.width();
+ const int boundsHeight = bounds.width();
+ const QString key = QStringLiteral("qquickuniversalfocusrectangle_%1_%2").arg(QString::number(boundsWidth), QString::number(boundsHeight));
+
+ QPixmap pixmap(boundsWidth, boundsHeight);
+ if (!QPixmapCache::find(key, &pixmap)) {
+ bounds.adjust(0, 0, -1, -1);
+ pixmap.fill(Qt::transparent);
+ QPainter p(&pixmap);
+
+ QPen pen;
+ pen.setWidth(1);
+ pen.setColor(Qt::white);
+ p.setPen(pen);
+ p.drawRect(bounds);
+
+ pen.setColor(Qt::black);
+ pen.setDashPattern(QList<qreal>(2, 1));
+ p.setPen(pen);
+ p.drawRect(bounds);
+
+ QPixmapCache::insert(key, pixmap);
+ }
+ painter->drawPixmap(0, 0, pixmap);
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickuniversalfocusrectangle_p.cpp"
diff --git a/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle_p.h b/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle_p.h
new file mode 100644
index 0000000000..909c566722
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalfocusrectangle_p.h
@@ -0,0 +1,37 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKUNIVERSALFOCUSRECTANGLE_P_H
+#define QQUICKUNIVERSALFOCUSRECTANGLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtQuick/qquickpainteditem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickUniversalFocusRectangle : public QQuickPaintedItem
+{
+ Q_OBJECT
+ QML_NAMED_ELEMENT(FocusRectangle)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ QQuickUniversalFocusRectangle(QQuickItem *parent = nullptr);
+
+ void paint(QPainter *painter) override;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKUNIVERSALFOCUSRECTANGLE_P_H
diff --git a/src/quickcontrols/universal/impl/qquickuniversalprogressbar.cpp b/src/quickcontrols/universal/impl/qquickuniversalprogressbar.cpp
new file mode 100644
index 0000000000..0ab47e8804
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalprogressbar.cpp
@@ -0,0 +1,307 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversalprogressbar_p.h"
+
+#include <QtCore/qmath.h>
+#include <QtCore/qeasingcurve.h>
+#include <QtQuick/private/qquickitem_p.h>
+#include <QtQuick/private/qsgadaptationlayer_p.h>
+#include <QtQuick/qsgrectanglenode.h>
+#include <QtQuickControls2Impl/private/qquickanimatednode_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static const int PhaseCount = 4;
+static const int EllipseCount = 5;
+static const int Interval = 167;
+static const int TotalDuration = 3917;
+static const int VisibleDuration = 3000;
+static const qreal EllipseDiameter = 4;
+static const qreal EllipseOffset = 4;
+static const qreal ContainerAnimationStartPosition = -34; // absolute
+static const qreal ContainerAnimationEndPosition = 0.435222; // relative
+static const qreal EllipseAnimationWellPosition = 0.333333333333333; // relative
+static const qreal EllipseAnimationEndPosition = 0.666666666666667; // relative
+
+class QQuickUniversalProgressBarNode : public QQuickAnimatedNode
+{
+public:
+ QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item);
+
+ void updateCurrentTime(int time) override;
+ void sync(QQuickItem *item) override;
+
+private:
+ struct Phase {
+ Phase() = default;
+ Phase(int d, qreal f, qreal t) : duration(d), from(f), to(t) { }
+ int duration = 0;
+ qreal from = 0;
+ qreal to = 0;
+ };
+
+ bool m_indeterminate = false;
+ Phase m_borderPhases[PhaseCount];
+ Phase m_ellipsePhases[PhaseCount];
+};
+
+QQuickUniversalProgressBarNode::QQuickUniversalProgressBarNode(QQuickUniversalProgressBar *item)
+ : QQuickAnimatedNode(item)
+{
+ setLoopCount(Infinite);
+ setDuration(TotalDuration);
+
+ m_borderPhases[0] = Phase( 500, -50, 0);
+ m_borderPhases[1] = Phase(1500, 0, 0);
+ m_borderPhases[2] = Phase(1000, 0, 100);
+ m_borderPhases[3] = Phase( 917, 100, 100);
+
+ m_ellipsePhases[0] = Phase(1000, 0, EllipseAnimationWellPosition);
+ m_ellipsePhases[1] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationWellPosition);
+ m_ellipsePhases[2] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition);
+ m_ellipsePhases[3] = Phase(1000, EllipseAnimationWellPosition, EllipseAnimationEndPosition);
+}
+
+void QQuickUniversalProgressBarNode::updateCurrentTime(int time)
+{
+ QSGRectangleNode *geometryNode = static_cast<QSGRectangleNode *>(firstChild());
+ Q_ASSERT(!geometryNode || geometryNode->type() == QSGNode::GeometryNodeType);
+ if (!geometryNode)
+ return;
+
+ QSGTransformNode *gridNode = static_cast<QSGTransformNode *>(geometryNode->firstChild());
+ Q_ASSERT(!gridNode || gridNode->type() == QSGNode::TransformNodeType);
+ if (!gridNode)
+ return;
+
+ qreal width = geometryNode->rect().width();
+ {
+ qreal from = ContainerAnimationStartPosition;
+ qreal to = from + ContainerAnimationEndPosition * width;
+ qreal progress = static_cast<qreal>(time) / TotalDuration;
+ qreal dx = from + (to - from) * progress;
+
+ QMatrix4x4 matrix;
+ matrix.translate(dx, 0);
+ gridNode->setMatrix(matrix);
+ }
+
+ int nodeIndex = 0;
+ QSGTransformNode *borderNode = static_cast<QSGTransformNode *>(gridNode->firstChild());
+ while (borderNode) {
+ Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType);
+
+ QSGTransformNode *ellipseNode = static_cast<QSGTransformNode *>(borderNode->firstChild());
+ Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType);
+
+ QSGOpacityNode *opacityNode = static_cast<QSGOpacityNode *>(ellipseNode->firstChild());
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ int begin = nodeIndex * Interval;
+ int end = VisibleDuration + nodeIndex * Interval;
+
+ bool visible = time >= begin && time <= end;
+ opacityNode->setOpacity(visible ? 1.0 : 0.0);
+
+ if (visible) {
+ {
+ int phaseIndex, remain = time, elapsed = 0;
+ for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) {
+ if (remain <= m_borderPhases[phaseIndex].duration + begin)
+ break;
+ remain -= m_borderPhases[phaseIndex].duration;
+ elapsed += m_borderPhases[phaseIndex].duration;
+ }
+
+ const Phase &phase = m_borderPhases[phaseIndex];
+
+ qreal pos = time - elapsed - begin;
+ qreal progress = pos / phase.duration;
+ qreal dx = phase.from + (phase.to - phase.from) * progress;
+
+ QMatrix4x4 matrix;
+ matrix.translate(dx, 0);
+ borderNode->setMatrix(matrix);
+ }
+
+ {
+ QEasingCurve curve(QEasingCurve::BezierSpline);
+ curve.addCubicBezierSegment(QPointF(0.4, 0.0), QPointF(0.6, 1.0), QPointF(1.0, 1.0));
+
+ int phaseIndex, remain = time, elapsed = 0;
+ for (phaseIndex = 0; phaseIndex < PhaseCount - 1; ++phaseIndex) {
+ if (remain <= m_ellipsePhases[phaseIndex].duration + begin)
+ break;
+ remain -= m_ellipsePhases[phaseIndex].duration;
+ elapsed += m_ellipsePhases[phaseIndex].duration;
+ }
+
+ const Phase &phase = m_ellipsePhases[phaseIndex];
+
+ qreal from = phase.from * width;
+ qreal to = phase.to * width;
+ qreal pos = time - elapsed - begin;
+ qreal progress = curve.valueForProgress(pos / phase.duration);
+ qreal dx = from + (to - from) * progress;
+
+ QMatrix4x4 matrix;
+ matrix.translate(dx, 0);
+ ellipseNode->setMatrix(matrix);
+ }
+ }
+
+ borderNode = static_cast<QSGTransformNode *>(borderNode->nextSibling());
+ ++nodeIndex;
+ }
+}
+
+void QQuickUniversalProgressBarNode::sync(QQuickItem *item)
+{
+ QQuickUniversalProgressBar *bar = static_cast<QQuickUniversalProgressBar *>(item);
+ if (m_indeterminate != bar->isIndeterminate()) {
+ m_indeterminate = bar->isIndeterminate();
+ if (m_indeterminate)
+ start();
+ else
+ stop();
+ }
+
+ QQuickItemPrivate *d = QQuickItemPrivate::get(item);
+
+ QRectF bounds = item->boundingRect();
+ bounds.setHeight(item->implicitHeight());
+ bounds.moveTop((item->height() - bounds.height()) / 2.0);
+ if (!m_indeterminate)
+ bounds.setWidth(bar->progress() * bounds.width());
+
+ QSGRectangleNode *geometryNode = static_cast<QSGRectangleNode *>(firstChild());
+ if (!geometryNode) {
+ geometryNode = item->window()->createRectangleNode();
+ appendChildNode(geometryNode);
+ }
+ geometryNode->setRect(bounds);
+ geometryNode->setColor(m_indeterminate ? Qt::transparent : bar->color());
+
+ if (!m_indeterminate) {
+ while (QSGNode *node = geometryNode->firstChild())
+ delete node;
+ return;
+ }
+
+ QSGTransformNode *gridNode = static_cast<QSGTransformNode *>(geometryNode->firstChild());
+ if (!gridNode) {
+ gridNode = new QSGTransformNode;
+ geometryNode->appendChildNode(gridNode);
+ }
+ Q_ASSERT(gridNode->type() == QSGNode::TransformNodeType);
+
+ QSGNode *borderNode = gridNode->firstChild();
+ for (int i = 0; i < EllipseCount; ++i) {
+ if (!borderNode) {
+ borderNode = new QSGTransformNode;
+ gridNode->appendChildNode(borderNode);
+
+ QSGTransformNode *ellipseNode = new QSGTransformNode;
+ borderNode->appendChildNode(ellipseNode);
+
+ QSGOpacityNode *opacityNode = new QSGOpacityNode;
+ ellipseNode->appendChildNode(opacityNode);
+
+ QSGInternalRectangleNode *rectNode = d->sceneGraphContext()->createInternalRectangleNode();
+ rectNode->setAntialiasing(true);
+ rectNode->setRadius(EllipseDiameter / 2);
+ opacityNode->appendChildNode(rectNode);
+ }
+ Q_ASSERT(borderNode->type() == QSGNode::TransformNodeType);
+
+ QSGNode *ellipseNode = borderNode->firstChild();
+ Q_ASSERT(ellipseNode->type() == QSGNode::TransformNodeType);
+
+ QSGNode *opacityNode = ellipseNode->firstChild();
+ Q_ASSERT(opacityNode->type() == QSGNode::OpacityNodeType);
+
+ QSGInternalRectangleNode *rectNode = static_cast<QSGInternalRectangleNode *>(opacityNode->firstChild());
+ Q_ASSERT(rectNode->type() == QSGNode::GeometryNodeType);
+
+ rectNode->setRect(QRectF((EllipseCount - i - 1) * (EllipseDiameter + EllipseOffset), (item->height() - EllipseDiameter) / 2, EllipseDiameter, EllipseDiameter));
+ rectNode->setColor(bar->color());
+ rectNode->update();
+
+ borderNode = borderNode->nextSibling();
+ }
+}
+
+QQuickUniversalProgressBar::QQuickUniversalProgressBar(QQuickItem *parent)
+ : QQuickItem(parent)
+{
+ setFlag(ItemHasContents);
+}
+
+QColor QQuickUniversalProgressBar::color() const
+{
+ return m_color;
+}
+
+void QQuickUniversalProgressBar::setColor(const QColor &color)
+{
+ if (m_color == color)
+ return;
+
+ m_color = color;
+ update();
+}
+
+qreal QQuickUniversalProgressBar::progress() const
+{
+ return m_progress;
+}
+
+void QQuickUniversalProgressBar::setProgress(qreal progress)
+{
+ if (progress == m_progress)
+ return;
+
+ m_progress = progress;
+ update();
+}
+
+bool QQuickUniversalProgressBar::isIndeterminate() const
+{
+ return m_indeterminate;
+}
+
+void QQuickUniversalProgressBar::setIndeterminate(bool indeterminate)
+{
+ if (indeterminate == m_indeterminate)
+ return;
+
+ m_indeterminate = indeterminate;
+ setClip(m_indeterminate);
+ update();
+}
+
+void QQuickUniversalProgressBar::itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data)
+{
+ QQuickItem::itemChange(change, data);
+ if (change == ItemVisibleHasChanged)
+ update();
+}
+
+QSGNode *QQuickUniversalProgressBar::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeData *)
+{
+ QQuickUniversalProgressBarNode *node = static_cast<QQuickUniversalProgressBarNode *>(oldNode);
+ if (isVisible() && width() > 0 && height() > 0) {
+ if (!node)
+ node = new QQuickUniversalProgressBarNode(this);
+ node->sync(this);
+ } else {
+ delete node;
+ node = nullptr;
+ }
+ return node;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickuniversalprogressbar_p.cpp"
diff --git a/src/quickcontrols/universal/impl/qquickuniversalprogressbar_p.h b/src/quickcontrols/universal/impl/qquickuniversalprogressbar_p.h
new file mode 100644
index 0000000000..a4bbae8cb5
--- /dev/null
+++ b/src/quickcontrols/universal/impl/qquickuniversalprogressbar_p.h
@@ -0,0 +1,59 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKUNIVERSALPROGRESSBAR_P_H
+#define QQUICKUNIVERSALPROGRESSBAR_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQuick/qquickitem.h>
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickUniversalProgressBar : public QQuickItem
+{
+ Q_OBJECT
+ Q_PROPERTY(QColor color READ color WRITE setColor FINAL)
+ Q_PROPERTY(qreal progress READ progress WRITE setProgress FINAL)
+ Q_PROPERTY(bool indeterminate READ isIndeterminate WRITE setIndeterminate FINAL)
+ QML_NAMED_ELEMENT(ProgressBarImpl)
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickUniversalProgressBar(QQuickItem *parent = nullptr);
+
+ QColor color() const;
+ void setColor(const QColor &color);
+
+ qreal progress() const;
+ void setProgress(qreal progress);
+
+ bool isIndeterminate() const;
+ void setIndeterminate(bool indeterminate);
+
+protected:
+ void itemChange(ItemChange change, const ItemChangeData &data) override;
+ QSGNode *updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
+
+private:
+ QColor m_color = Qt::black;
+ qreal m_progress = 0.0;
+ bool m_indeterminate = false;
+};
+
+QT_END_NAMESPACE
+
+QML_DECLARE_TYPE(QQuickUniversalProgressBar)
+
+#endif // QQUICKUNIVERSALPROGRESSBAR_P_H
diff --git a/src/quickcontrols/universal/qquickuniversalstyle.cpp b/src/quickcontrols/universal/qquickuniversalstyle.cpp
new file mode 100644
index 0000000000..cacf20a75f
--- /dev/null
+++ b/src/quickcontrols/universal/qquickuniversalstyle.cpp
@@ -0,0 +1,587 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversalstyle_p.h"
+
+#include <QtCore/qdebug.h>
+#include <QtCore/qsettings.h>
+#include <QtQml/qqmlinfo.h>
+#include <QtQuickControls2/private/qquickstyle_p.h>
+
+QT_BEGIN_NAMESPACE
+
+static QRgb qquickuniversal_light_color(QQuickUniversalStyle::SystemColor role)
+{
+ static const QRgb colors[] = {
+ 0xFFFFFFFF, // SystemAltHighColor
+ 0x33FFFFFF, // SystemAltLowColor
+ 0x99FFFFFF, // SystemAltMediumColor
+ 0xCCFFFFFF, // SystemAltMediumHighColor
+ 0x66FFFFFF, // SystemAltMediumLowColor
+ 0xFF000000, // SystemBaseHighColor
+ 0x33000000, // SystemBaseLowColor
+ 0x99000000, // SystemBaseMediumColor
+ 0xCC000000, // SystemBaseMediumHighColor
+ 0x66000000, // SystemBaseMediumLowColor
+ 0xFF171717, // SystemChromeAltLowColor
+ 0xFF000000, // SystemChromeBlackHighColor
+ 0x33000000, // SystemChromeBlackLowColor
+ 0x66000000, // SystemChromeBlackMediumLowColor
+ 0xCC000000, // SystemChromeBlackMediumColor
+ 0xFFCCCCCC, // SystemChromeDisabledHighColor
+ 0xFF7A7A7A, // SystemChromeDisabledLowColor
+ 0xFFCCCCCC, // SystemChromeHighColor
+ 0xFFF2F2F2, // SystemChromeLowColor
+ 0xFFE6E6E6, // SystemChromeMediumColor
+ 0xFFF2F2F2, // SystemChromeMediumLowColor
+ 0xFFFFFFFF, // SystemChromeWhiteColor
+ 0x19000000, // SystemListLowColor
+ 0x33000000 // SystemListMediumColor
+ };
+ return colors[role];
+}
+
+static QRgb qquickuniversal_dark_color(QQuickUniversalStyle::SystemColor role)
+{
+ static const QRgb colors[] = {
+ 0xFF000000, // SystemAltHighColor
+ 0x33000000, // SystemAltLowColor
+ 0x99000000, // SystemAltMediumColor
+ 0xCC000000, // SystemAltMediumHighColor
+ 0x66000000, // SystemAltMediumLowColor
+ 0xFFFFFFFF, // SystemBaseHighColor
+ 0x33FFFFFF, // SystemBaseLowColor
+ 0x99FFFFFF, // SystemBaseMediumColor
+ 0xCCFFFFFF, // SystemBaseMediumHighColor
+ 0x66FFFFFF, // SystemBaseMediumLowColor
+ 0xFFF2F2F2, // SystemChromeAltLowColor
+ 0xFF000000, // SystemChromeBlackHighColor
+ 0x33000000, // SystemChromeBlackLowColor
+ 0x66000000, // SystemChromeBlackMediumLowColor
+ 0xCC000000, // SystemChromeBlackMediumColor
+ 0xFF333333, // SystemChromeDisabledHighColor
+ 0xFF858585, // SystemChromeDisabledLowColor
+ 0xFF767676, // SystemChromeHighColor
+ 0xFF171717, // SystemChromeLowColor
+ 0xFF1F1F1F, // SystemChromeMediumColor
+ 0xFF2B2B2B, // SystemChromeMediumLowColor
+ 0xFFFFFFFF, // SystemChromeWhiteColor
+ 0x19FFFFFF, // SystemListLowColor
+ 0x33FFFFFF // SystemListMediumColor
+ };
+ return colors[role];
+}
+
+static QRgb qquickuniversal_accent_color(QQuickUniversalStyle::Color accent)
+{
+ static const QRgb colors[] = {
+ 0xFFA4C400, // Lime
+ 0xFF60A917, // Green
+ 0xFF008A00, // Emerald
+ 0xFF00ABA9, // Teal
+ 0xFF1BA1E2, // Cyan
+ 0xFF3E65FF, // Cobalt
+ 0xFF6A00FF, // Indigo
+ 0xFFAA00FF, // Violet
+ 0xFFF472D0, // Pink
+ 0xFFD80073, // Magenta
+ 0xFFA20025, // Crimson
+ 0xFFE51400, // Red
+ 0xFFFA6800, // Orange
+ 0xFFF0A30A, // Amber
+ 0xFFE3C800, // Yellow
+ 0xFF825A2C, // Brown
+ 0xFF6D8764, // Olive
+ 0xFF647687, // Steel
+ 0xFF76608A, // Mauve
+ 0xFF87794E // Taupe
+ };
+ return colors[accent];
+}
+
+static QQuickUniversalStyle::Theme qquickuniversal_effective_theme(QQuickUniversalStyle::Theme theme)
+{
+ if (theme == QQuickUniversalStyle::System)
+ theme = QQuickStylePrivate::isDarkSystemTheme() ? QQuickUniversalStyle::Dark : QQuickUniversalStyle::Light;
+ return theme;
+}
+
+// If no value was inherited from a parent or explicitly set, the "global" values are used.
+// The initial, default values of the globals are hard-coded here, but the environment
+// variables and .conf file override them if specified.
+static QQuickUniversalStyle::Theme GlobalTheme = QQuickUniversalStyle::Light;
+static QRgb GlobalAccent = qquickuniversal_accent_color(QQuickUniversalStyle::Cobalt);
+static QRgb GlobalForeground = qquickuniversal_light_color(QQuickUniversalStyle::BaseHigh);
+static QRgb GlobalBackground = qquickuniversal_light_color(QQuickUniversalStyle::AltHigh);
+// These represent whether a global foreground/background was set.
+// Each style's m_hasForeground/m_hasBackground are initialized to these values.
+static bool HasGlobalForeground = false;
+static bool HasGlobalBackground = false;
+
+QQuickUniversalStyle::QQuickUniversalStyle(QObject *parent) : QQuickAttachedPropertyPropagator(parent),
+ m_hasForeground(HasGlobalForeground), m_hasBackground(HasGlobalBackground), m_theme(GlobalTheme),
+ m_accent(GlobalAccent), m_foreground(GlobalForeground), m_background(GlobalBackground)
+{
+ initialize();
+}
+
+QQuickUniversalStyle *QQuickUniversalStyle::qmlAttachedProperties(QObject *object)
+{
+ return new QQuickUniversalStyle(object);
+}
+
+QQuickUniversalStyle::Theme QQuickUniversalStyle::theme() const
+{
+ return m_theme;
+}
+
+void QQuickUniversalStyle::setTheme(Theme theme)
+{
+ theme = qquickuniversal_effective_theme(theme);
+ m_explicitTheme = true;
+ if (m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ emit themeChanged();
+ emit paletteChanged();
+ emit foregroundChanged();
+ emit backgroundChanged();
+}
+
+void QQuickUniversalStyle::inheritTheme(Theme theme)
+{
+ if (m_explicitTheme || m_theme == theme)
+ return;
+
+ m_theme = theme;
+ propagateTheme();
+ emit themeChanged();
+ emit paletteChanged();
+ emit foregroundChanged();
+ emit backgroundChanged();
+}
+
+void QQuickUniversalStyle::propagateTheme()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child);
+ if (universal)
+ universal->inheritTheme(m_theme);
+ }
+}
+
+void QQuickUniversalStyle::resetTheme()
+{
+ if (!m_explicitTheme)
+ return;
+
+ m_explicitTheme = false;
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(attachedParent());
+ inheritTheme(universal ? universal->theme() : GlobalTheme);
+}
+
+QVariant QQuickUniversalStyle::accent() const
+{
+ return QColor::fromRgba(m_accent);
+}
+
+void QQuickUniversalStyle::setAccent(const QVariant &var)
+{
+ QRgb accent = 0;
+ if (!variantToRgba(var, "accent", &accent))
+ return;
+
+ m_explicitAccent = true;
+ if (m_accent == accent)
+ return;
+
+ m_accent = accent;
+ propagateAccent();
+ emit accentChanged();
+}
+
+void QQuickUniversalStyle::inheritAccent(QRgb accent)
+{
+ if (m_explicitAccent || m_accent == accent)
+ return;
+
+ m_accent = accent;
+ propagateAccent();
+ emit accentChanged();
+}
+
+void QQuickUniversalStyle::propagateAccent()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child);
+ if (universal)
+ universal->inheritAccent(m_accent);
+ }
+}
+
+void QQuickUniversalStyle::resetAccent()
+{
+ if (!m_explicitAccent)
+ return;
+
+ m_explicitAccent = false;
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(attachedParent());
+ inheritAccent(universal ? universal->m_accent : GlobalAccent);
+}
+
+QVariant QQuickUniversalStyle::foreground() const
+{
+ if (m_hasForeground)
+ return QColor::fromRgba(m_foreground);
+ return baseHighColor();
+}
+
+void QQuickUniversalStyle::setForeground(const QVariant &var)
+{
+ QRgb foreground = 0;
+ if (!variantToRgba(var, "foreground", &foreground))
+ return;
+
+ m_hasForeground = true;
+ m_explicitForeground = true;
+ if (m_foreground == foreground)
+ return;
+
+ m_foreground = foreground;
+ propagateForeground();
+ emit foregroundChanged();
+}
+
+void QQuickUniversalStyle::inheritForeground(QRgb foreground, bool has)
+{
+ if (m_explicitForeground || m_foreground == foreground)
+ return;
+
+ m_hasForeground = has;
+ m_foreground = foreground;
+ propagateForeground();
+ emit foregroundChanged();
+}
+
+void QQuickUniversalStyle::propagateForeground()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child);
+ if (universal)
+ universal->inheritForeground(m_foreground, m_hasForeground);
+ }
+}
+
+void QQuickUniversalStyle::resetForeground()
+{
+ if (!m_explicitForeground)
+ return;
+
+ m_hasForeground = false;
+ m_explicitForeground = false;
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(attachedParent());
+ inheritForeground(universal ? universal->m_foreground : GlobalForeground, universal ? universal->m_hasForeground : false);
+}
+
+QVariant QQuickUniversalStyle::background() const
+{
+ if (m_hasBackground)
+ return QColor::fromRgba(m_background);
+ return altHighColor();
+}
+
+void QQuickUniversalStyle::setBackground(const QVariant &var)
+{
+ QRgb background = 0;
+ if (!variantToRgba(var, "background", &background))
+ return;
+
+ m_hasBackground = true;
+ m_explicitBackground = true;
+ if (m_background == background)
+ return;
+
+ m_background = background;
+ propagateBackground();
+ emit backgroundChanged();
+}
+
+void QQuickUniversalStyle::inheritBackground(QRgb background, bool has)
+{
+ if (m_explicitBackground || m_background == background)
+ return;
+
+ m_hasBackground = has;
+ m_background = background;
+ propagateBackground();
+ emit backgroundChanged();
+}
+
+void QQuickUniversalStyle::propagateBackground()
+{
+ const auto styles = attachedChildren();
+ for (QQuickAttachedPropertyPropagator *child : styles) {
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(child);
+ if (universal)
+ universal->inheritBackground(m_background, m_hasBackground);
+ }
+}
+
+void QQuickUniversalStyle::resetBackground()
+{
+ if (!m_explicitBackground)
+ return;
+
+ m_hasBackground = false;
+ m_explicitBackground = false;
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(attachedParent());
+ inheritBackground(universal ? universal->m_background : GlobalBackground, universal ? universal->m_hasBackground : false);
+}
+
+QColor QQuickUniversalStyle::color(Color color) const
+{
+ return qquickuniversal_accent_color(color);
+}
+
+QColor QQuickUniversalStyle::altHighColor() const
+{
+ return systemColor(AltHigh);
+}
+
+QColor QQuickUniversalStyle::altLowColor() const
+{
+ return systemColor(AltLow);
+}
+
+QColor QQuickUniversalStyle::altMediumColor() const
+{
+ return systemColor(AltMedium);
+}
+
+QColor QQuickUniversalStyle::altMediumHighColor() const
+{
+ return systemColor(AltMediumHigh);
+}
+
+QColor QQuickUniversalStyle::altMediumLowColor() const
+{
+ return systemColor(AltMediumLow);
+}
+
+QColor QQuickUniversalStyle::baseHighColor() const
+{
+ return systemColor(BaseHigh);
+}
+
+QColor QQuickUniversalStyle::baseLowColor() const
+{
+ return systemColor(BaseLow);
+}
+
+QColor QQuickUniversalStyle::baseMediumColor() const
+{
+ return systemColor(BaseMedium);
+}
+
+QColor QQuickUniversalStyle::baseMediumHighColor() const
+{
+ return systemColor(BaseMediumHigh);
+}
+
+QColor QQuickUniversalStyle::baseMediumLowColor() const
+{
+ return systemColor(BaseMediumLow);
+}
+
+QColor QQuickUniversalStyle::chromeAltLowColor() const
+{
+ return systemColor(ChromeAltLow);
+}
+
+QColor QQuickUniversalStyle::chromeBlackHighColor() const
+{
+ return systemColor(ChromeBlackHigh);
+}
+
+QColor QQuickUniversalStyle::chromeBlackLowColor() const
+{
+ return systemColor(ChromeBlackLow);
+}
+
+QColor QQuickUniversalStyle::chromeBlackMediumLowColor() const
+{
+ return systemColor(ChromeBlackMediumLow);
+}
+
+QColor QQuickUniversalStyle::chromeBlackMediumColor() const
+{
+ return systemColor(ChromeBlackMedium);
+}
+
+QColor QQuickUniversalStyle::chromeDisabledHighColor() const
+{
+ return systemColor(ChromeDisabledHigh);
+}
+
+QColor QQuickUniversalStyle::chromeDisabledLowColor() const
+{
+ return systemColor(ChromeDisabledLow);
+}
+
+QColor QQuickUniversalStyle::chromeHighColor() const
+{
+ return systemColor(ChromeHigh);
+}
+
+QColor QQuickUniversalStyle::chromeLowColor() const
+{
+ return systemColor(ChromeLow);
+}
+
+QColor QQuickUniversalStyle::chromeMediumColor() const
+{
+ return systemColor(ChromeMedium);
+}
+
+QColor QQuickUniversalStyle::chromeMediumLowColor() const
+{
+ return systemColor(ChromeMediumLow);
+}
+
+QColor QQuickUniversalStyle::chromeWhiteColor() const
+{
+ return systemColor(ChromeWhite);
+}
+
+QColor QQuickUniversalStyle::listLowColor() const
+{
+ return systemColor(ListLow);
+}
+
+QColor QQuickUniversalStyle::listMediumColor() const
+{
+ return systemColor(ListMedium);
+}
+
+QColor QQuickUniversalStyle::systemColor(SystemColor role) const
+{
+ return QColor::fromRgba(m_theme == QQuickUniversalStyle::Dark ? qquickuniversal_dark_color(role) : qquickuniversal_light_color(role));
+}
+
+void QQuickUniversalStyle::attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent)
+{
+ Q_UNUSED(oldParent);
+ QQuickUniversalStyle *universal = qobject_cast<QQuickUniversalStyle *>(newParent);
+ if (universal) {
+ inheritTheme(universal->theme());
+ inheritAccent(universal->m_accent);
+ inheritForeground(universal->m_foreground, universal->m_hasForeground);
+ inheritBackground(universal->m_background, universal->m_hasBackground);
+ }
+}
+
+template <typename Enum>
+static Enum toEnumValue(const QByteArray &value, bool *ok)
+{
+ QMetaEnum enumeration = QMetaEnum::fromType<Enum>();
+ return static_cast<Enum>(enumeration.keyToValue(value, ok));
+}
+
+static QByteArray resolveSetting(const QByteArray &env, const QSharedPointer<QSettings> &settings, const QString &name)
+{
+ QByteArray value = qgetenv(env);
+#if QT_CONFIG(settings)
+ if (value.isNull() && !settings.isNull())
+ value = settings->value(name).toByteArray();
+#endif
+ return value;
+}
+
+void QQuickUniversalStyle::initGlobals()
+{
+ QSharedPointer<QSettings> settings = QQuickStylePrivate::settings(QStringLiteral("Universal"));
+
+ bool ok = false;
+ QByteArray themeValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_THEME", settings, QStringLiteral("Theme"));
+ Theme themeEnum = toEnumValue<Theme>(themeValue, &ok);
+ if (ok)
+ GlobalTheme = qquickuniversal_effective_theme(themeEnum);
+ else if (!themeValue.isEmpty())
+ qWarning().nospace().noquote() << "Universal: unknown theme value: " << themeValue;
+
+ QByteArray accentValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_ACCENT", settings, QStringLiteral("Accent"));
+ Color accentEnum = toEnumValue<Color>(accentValue, &ok);
+ if (ok) {
+ GlobalAccent = qquickuniversal_accent_color(accentEnum);
+ } else if (!accentValue.isEmpty()) {
+ QColor color = QColor::fromString(accentValue);
+ if (color.isValid())
+ GlobalAccent = color.rgba();
+ else
+ qWarning().nospace().noquote() << "Universal: unknown accent value: " << accentValue;
+ }
+
+ QByteArray foregroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_FOREGROUND", settings, QStringLiteral("Foreground"));
+ Color foregroundEnum = toEnumValue<Color>(foregroundValue, &ok);
+ if (ok) {
+ GlobalForeground = qquickuniversal_accent_color(foregroundEnum);
+ HasGlobalForeground = true;
+ } else if (!foregroundValue.isEmpty()) {
+ QColor color = QColor::fromString(foregroundValue);
+ if (color.isValid()) {
+ GlobalForeground = color.rgba();
+ HasGlobalForeground = true;
+ } else {
+ qWarning().nospace().noquote() << "Universal: unknown foreground value: " << foregroundValue;
+ }
+ }
+
+ QByteArray backgroundValue = resolveSetting("QT_QUICK_CONTROLS_UNIVERSAL_BACKGROUND", settings, QStringLiteral("Background"));
+ Color backgroundEnum = toEnumValue<Color>(backgroundValue, &ok);
+ if (ok) {
+ GlobalBackground = qquickuniversal_accent_color(backgroundEnum);
+ HasGlobalBackground = true;
+ } else if (!backgroundValue.isEmpty()) {
+ QColor color = QColor::fromString(backgroundValue);
+ if (color.isValid()) {
+ GlobalBackground = color.rgba();
+ HasGlobalBackground = true;
+ } else {
+ qWarning().nospace().noquote() << "Universal: unknown background value: " << backgroundValue;
+ }
+ }
+}
+
+bool QQuickUniversalStyle::variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const
+{
+ if (var.metaType().id() == QMetaType::Int) {
+ int val = var.toInt();
+ if (val < Lime || val > Taupe) {
+ qmlWarning(parent()) << "unknown Universal." << name << " value: " << val;
+ return false;
+ }
+ *rgba = qquickuniversal_accent_color(static_cast<Color>(val));
+ } else {
+ int val = QMetaEnum::fromType<Color>().keyToValue(var.toByteArray());
+ if (val != -1) {
+ *rgba = qquickuniversal_accent_color(static_cast<Color>(val));
+ } else {
+ QColor color = QColor::fromString(var.toString());
+ if (!color.isValid()) {
+ qmlWarning(parent()) << "unknown Universal." << name << " value: " << var.toString();
+ return false;
+ }
+ *rgba = color.rgba();
+ }
+ }
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qquickuniversalstyle_p.cpp"
diff --git a/src/quickcontrols/universal/qquickuniversalstyle_p.h b/src/quickcontrols/universal/qquickuniversalstyle_p.h
new file mode 100644
index 0000000000..024fde2192
--- /dev/null
+++ b/src/quickcontrols/universal/qquickuniversalstyle_p.h
@@ -0,0 +1,212 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKUNIVERSALSTYLE_P_H
+#define QQUICKUNIVERSALSTYLE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtGui/qcolor.h>
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/qquickattachedpropertypropagator.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickUniversalStylePrivate;
+
+class QQuickUniversalStyle : public QQuickAttachedPropertyPropagator
+{
+ Q_OBJECT
+ Q_PROPERTY(Theme theme READ theme WRITE setTheme RESET resetTheme NOTIFY themeChanged FINAL)
+ Q_PROPERTY(QVariant accent READ accent WRITE setAccent RESET resetAccent NOTIFY accentChanged FINAL)
+ Q_PROPERTY(QVariant foreground READ foreground WRITE setForeground RESET resetForeground NOTIFY foregroundChanged FINAL)
+ Q_PROPERTY(QVariant background READ background WRITE setBackground RESET resetBackground NOTIFY backgroundChanged FINAL)
+
+ Q_PROPERTY(QColor altHighColor READ altHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor altLowColor READ altLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor altMediumColor READ altMediumColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor altMediumHighColor READ altMediumHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor altMediumLowColor READ altMediumLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor baseHighColor READ baseHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor baseLowColor READ baseLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor baseMediumColor READ baseMediumColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor baseMediumHighColor READ baseMediumHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor baseMediumLowColor READ baseMediumLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeAltLowColor READ chromeAltLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeBlackHighColor READ chromeBlackHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeBlackLowColor READ chromeBlackLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeBlackMediumLowColor READ chromeBlackMediumLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeBlackMediumColor READ chromeBlackMediumColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeDisabledHighColor READ chromeDisabledHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeDisabledLowColor READ chromeDisabledLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeHighColor READ chromeHighColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeLowColor READ chromeLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeMediumColor READ chromeMediumColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeMediumLowColor READ chromeMediumLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor chromeWhiteColor READ chromeWhiteColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor listLowColor READ listLowColor NOTIFY paletteChanged FINAL)
+ Q_PROPERTY(QColor listMediumColor READ listMediumColor NOTIFY paletteChanged FINAL)
+
+ QML_NAMED_ELEMENT(Universal)
+ QML_ATTACHED(QQuickUniversalStyle)
+ QML_UNCREATABLE("")
+ QML_ADDED_IN_VERSION(2, 0)
+
+public:
+ explicit QQuickUniversalStyle(QObject *parent = nullptr);
+
+ static QQuickUniversalStyle *qmlAttachedProperties(QObject *object);
+
+ enum Theme { Light, Dark, System };
+ Q_ENUM(Theme)
+
+ Theme theme() const;
+ void setTheme(Theme theme);
+ void inheritTheme(Theme theme);
+ void propagateTheme();
+ void resetTheme();
+
+ enum Color {
+ Lime,
+ Green,
+ Emerald,
+ Teal,
+ Cyan,
+ Cobalt,
+ Indigo,
+ Violet,
+ Pink,
+ Magenta,
+ Crimson,
+ Red,
+ Orange,
+ Amber,
+ Yellow,
+ Brown,
+ Olive,
+ Steel,
+ Mauve,
+ Taupe
+ };
+ Q_ENUM(Color)
+
+ QVariant accent() const;
+ void setAccent(const QVariant &accent);
+ void inheritAccent(QRgb accent);
+ void propagateAccent();
+ void resetAccent();
+
+ QVariant foreground() const;
+ void setForeground(const QVariant &foreground);
+ void inheritForeground(QRgb foreground, bool has);
+ void propagateForeground();
+ void resetForeground();
+
+ QVariant background() const;
+ void setBackground(const QVariant &background);
+ void inheritBackground(QRgb background, bool has);
+ void propagateBackground();
+ void resetBackground();
+
+ Q_INVOKABLE QColor color(Color color) const;
+
+ QColor altHighColor() const;
+ QColor altLowColor() const;
+ QColor altMediumColor() const;
+ QColor altMediumHighColor() const;
+ QColor altMediumLowColor() const;
+ QColor baseHighColor() const;
+ QColor baseLowColor() const;
+ QColor baseMediumColor() const;
+ QColor baseMediumHighColor() const;
+ QColor baseMediumLowColor() const;
+ QColor chromeAltLowColor() const;
+ QColor chromeBlackHighColor() const;
+ QColor chromeBlackLowColor() const;
+ QColor chromeBlackMediumLowColor() const;
+ QColor chromeBlackMediumColor() const;
+ QColor chromeDisabledHighColor() const;
+ QColor chromeDisabledLowColor() const;
+ QColor chromeHighColor() const;
+ QColor chromeLowColor() const;
+ QColor chromeMediumColor() const;
+ QColor chromeMediumLowColor() const;
+ QColor chromeWhiteColor() const;
+ QColor listLowColor() const;
+ QColor listMediumColor() const;
+
+ enum SystemColor {
+ AltHigh,
+ AltLow,
+ AltMedium,
+ AltMediumHigh,
+ AltMediumLow,
+ BaseHigh,
+ BaseLow,
+ BaseMedium,
+ BaseMediumHigh,
+ BaseMediumLow,
+ ChromeAltLow,
+ ChromeBlackHigh,
+ ChromeBlackLow,
+ ChromeBlackMediumLow,
+ ChromeBlackMedium,
+ ChromeDisabledHigh,
+ ChromeDisabledLow,
+ ChromeHigh,
+ ChromeLow,
+ ChromeMedium,
+ ChromeMediumLow,
+ ChromeWhite,
+ ListLow,
+ ListMedium
+ };
+
+ QColor systemColor(SystemColor role) const;
+
+ static void initGlobals();
+
+Q_SIGNALS:
+ void themeChanged();
+ void accentChanged();
+ void foregroundChanged();
+ void backgroundChanged();
+ void paletteChanged();
+
+protected:
+ void attachedParentChange(QQuickAttachedPropertyPropagator *newParent, QQuickAttachedPropertyPropagator *oldParent) override;
+
+private:
+ bool variantToRgba(const QVariant &var, const char *name, QRgb *rgba) const;
+
+ // These reflect whether a color value was explicitly set on the specific
+ // item that this attached style object represents.
+ bool m_explicitTheme = false;
+ bool m_explicitAccent = false;
+ bool m_explicitForeground = false;
+ bool m_explicitBackground = false;
+ // These will be true when this item has an explicit or inherited foreground/background
+ // color, or these colors were declared globally via settings (e.g. conf or env vars).
+ // Some color properties of the style will return different values depending on whether
+ // or not these are set.
+ bool m_hasForeground = false;
+ bool m_hasBackground = false;
+ // The actual values for this item, whether explicit, inherited or globally set.
+ Theme m_theme = Light;
+ QRgb m_accent = Qt::blue;
+ QRgb m_foreground = Qt::black;
+ QRgb m_background = Qt::white;
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKUNIVERSALSTYLE_P_H
diff --git a/src/quickcontrols/universal/qquickuniversaltheme.cpp b/src/quickcontrols/universal/qquickuniversaltheme.cpp
new file mode 100644
index 0000000000..fff5400986
--- /dev/null
+++ b/src/quickcontrols/universal/qquickuniversaltheme.cpp
@@ -0,0 +1,37 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversaltheme_p.h"
+
+#include <QtGui/qfontinfo.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+void QQuickUniversalTheme::initialize(QQuickTheme *theme)
+{
+ QFont systemFont;
+ QFont groupBoxTitleFont;
+ QFont tabButtonFont;
+
+ const QFont font(QLatin1String("Segoe UI"));
+ if (QFontInfo(font).family() == QLatin1String("Segoe UI")) {
+ const QStringList families{font.family()};
+ systemFont.setFamilies(families);
+ groupBoxTitleFont.setFamilies(families);
+ tabButtonFont.setFamilies(families);
+ }
+
+ systemFont.setPixelSize(15);
+ theme->setFont(QQuickTheme::System, systemFont);
+
+ groupBoxTitleFont.setPixelSize(15);
+ groupBoxTitleFont.setWeight(QFont::DemiBold);
+ theme->setFont(QQuickTheme::GroupBox, groupBoxTitleFont);
+
+ tabButtonFont.setPixelSize(24);
+ tabButtonFont.setWeight(QFont::Light);
+ theme->setFont(QQuickTheme::TabBar, tabButtonFont);
+}
+
+QT_END_NAMESPACE
diff --git a/src/quickcontrols/universal/qquickuniversaltheme_p.h b/src/quickcontrols/universal/qquickuniversaltheme_p.h
new file mode 100644
index 0000000000..84789c5da1
--- /dev/null
+++ b/src/quickcontrols/universal/qquickuniversaltheme_p.h
@@ -0,0 +1,32 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#ifndef QQUICKUNIVERSALTHEME_P_H
+#define QQUICKUNIVERSALTHEME_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/private/qglobal_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QQuickTheme;
+
+class QQuickUniversalTheme
+{
+public:
+ static void initialize(QQuickTheme *theme);
+};
+
+QT_END_NAMESPACE
+
+#endif // QQUICKUNIVERSALTHEME_P_H
diff --git a/src/quickcontrols/universal/qtquickcontrols2universalstyleplugin.cpp b/src/quickcontrols/universal/qtquickcontrols2universalstyleplugin.cpp
new file mode 100644
index 0000000000..683c966833
--- /dev/null
+++ b/src/quickcontrols/universal/qtquickcontrols2universalstyleplugin.cpp
@@ -0,0 +1,48 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include "qquickuniversalstyle_p.h"
+#include "qquickuniversaltheme_p.h"
+
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickTemplates2/private/qquicktheme_p.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Universal();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Universal);
+
+class QtQuickControls2UniversalStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2UniversalStylePlugin(QObject *parent = nullptr);
+
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+
+ QQuickUniversalTheme theme;
+};
+
+QtQuickControls2UniversalStylePlugin::QtQuickControls2UniversalStylePlugin(QObject *parent) : QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Universal;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2UniversalStylePlugin::name() const
+{
+ return QStringLiteral("Universal");
+}
+
+void QtQuickControls2UniversalStylePlugin::initializeTheme(QQuickTheme *theme)
+{
+ QQuickUniversalStyle::initGlobals();
+ this->theme.initialize(theme);
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2universalstyleplugin.moc"
diff --git a/src/quickcontrols/windows/Button.qml b/src/quickcontrols/windows/Button.qml
new file mode 100644
index 0000000000..c16965b021
--- /dev/null
+++ b/src/quickcontrols/windows/Button.qml
@@ -0,0 +1,43 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultButton {
+ id: control
+
+ background: NativeStyle.Button {
+ control: control
+ contentWidth: contentItem.implicitWidth
+ contentHeight: contentItem.implicitHeight
+ useNinePatchImage: false
+ overrideState: NativeStyle.StyleItem.NeverHovered
+ }
+
+ NativeStyle.Button {
+ id: hoverButton
+ control: control
+ x: background.x
+ y: background.y
+ width: background.width
+ height: background.height
+ useNinePatchImage: false
+ overrideState: NativeStyle.StyleItem.AlwaysHovered
+ opacity: control.hovered ? 1 : 0
+ visible: opacity !== 0
+ Behavior on opacity { NumberAnimation { duration: hoverButton.transitionDuration } }
+ }
+
+ contentItem: IconLabel {
+ spacing: control.spacing
+ mirrored: control.mirrored
+ display: control.display
+
+ icon: control.icon
+ text: control.text
+ font: control.font
+ color: control.flat && !control.down ? (control.visualFocus ? control.palette.highlight : control.palette.windowText) : control.palette.buttonText
+ }
+}
diff --git a/src/quickcontrols/windows/CMakeLists.txt b/src/quickcontrols/windows/CMakeLists.txt
new file mode 100644
index 0000000000..b5319fef52
--- /dev/null
+++ b/src/quickcontrols/windows/CMakeLists.txt
@@ -0,0 +1,56 @@
+# Copyright (C) 2022 The Qt Company Ltd.
+# SPDX-License-Identifier: BSD-3-Clause
+
+#####################################################################
+## qtquickcontrols2windowsstyleplugin Plugin:
+#####################################################################
+
+set(qml_files
+ "Button.qml"
+ "CheckBox.qml"
+ "ComboBox.qml"
+ "Frame.qml"
+ "GroupBox.qml"
+ "ProgressBar.qml"
+ "RadioButton.qml"
+ "SelectionRectangle.qml"
+ "Slider.qml"
+ "SpinBox.qml"
+ "TextArea.qml"
+ "TextField.qml"
+ "ScrollBar.qml"
+ "ScrollView.qml"
+)
+
+qt_internal_add_qml_module(qtquickcontrols2windowsstyleplugin
+ URI "QtQuick.Controls.Windows"
+ VERSION "${PROJECT_VERSION}"
+ CLASS_NAME QtQuickControls2WindowsStylePlugin
+ IMPORTS
+ QtQuick.Controls.Fusion/auto
+ PAST_MAJOR_VERSIONS 2
+ PLUGIN_TARGET qtquickcontrols2windowsstyleplugin
+ NO_PLUGIN_OPTIONAL
+ NO_GENERATE_PLUGIN_SOURCE
+ SOURCES
+ qtquickcontrols2windowsstyleplugin.cpp
+ QML_FILES
+ ${qml_files}
+ DEFINES
+ QT_NO_CAST_FROM_ASCII
+ QT_NO_CAST_TO_ASCII
+ LIBRARIES
+ Qt::CorePrivate
+ Qt::GuiPrivate
+ Qt::QmlPrivate
+ Qt::QuickControls2Private
+ Qt::QuickPrivate
+ Qt::QuickTemplates2Private
+)
+
+# Native style is a dependency of the Windows style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2windowsstyleplugin
+ qtquickcontrols2nativestyleplugin)
+# Fusion style is the required fallback style.
+_qt_internal_add_qml_static_plugin_dependency(qtquickcontrols2windowsstyleplugin
+ qtquickcontrols2fusionstyleplugin)
diff --git a/src/quickcontrols/windows/CheckBox.qml b/src/quickcontrols/windows/CheckBox.qml
new file mode 100644
index 0000000000..651caff5d2
--- /dev/null
+++ b/src/quickcontrols/windows/CheckBox.qml
@@ -0,0 +1,74 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.NativeStyle as NativeStyle
+
+T.CheckBox {
+ id: control
+
+ readonly property bool nativeIndicator: indicator instanceof NativeStyle.StyleItem
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ spacing: nativeIndicator ? 0 : 6
+ padding: nativeIndicator ? 0 : 6
+
+ indicator: NativeStyle.CheckBox {
+ control: control
+ y: control.topPadding + (control.availableHeight - height) >> 1
+ contentWidth: contentItem.implicitWidth
+ contentHeight: contentItem.implicitHeight
+ useNinePatchImage: false
+ overrideState: NativeStyle.StyleItem.NeverHovered
+ }
+
+ NativeStyle.CheckBox {
+ id: hoverCheckBox
+ control: control
+ x: indicator.x
+ y: indicator.y
+ z: 99 // Needs to be above the "unhovered" indicator
+ width: indicator.width
+ height: indicator.height
+ useNinePatchImage: false
+ overrideState: NativeStyle.StyleItem.AlwaysHovered
+ opacity: control.hovered ? 1 : 0
+ visible: opacity !== 0
+ Behavior on opacity { NumberAnimation { duration: hoverCheckBox.transitionDuration } }
+ }
+
+ contentItem: CheckLabel {
+ text: control.text
+ font: control.font
+ color: control.palette.windowText
+
+ // For some reason, the other styles set padding here (in the delegate), instead of in
+ // the control above. And they also adjust the indicator position by setting x and y
+ // explicitly (instead of using insets). So we follow the same pattern to ensure that
+ // setting a custom contentItem delegate from the app will end up looking the same for
+ // all styles. But this should probably be fixed for all styles (to make them work the
+ // same way as e.g Buttons).
+ leftPadding: {
+ if (nativeIndicator)
+ indicator.contentPadding.left
+ else
+ indicator && !mirrored ? indicator.width + spacing : 0
+ }
+
+ topPadding: nativeIndicator ? indicator.contentPadding.top : 0
+ rightPadding: {
+ if (nativeIndicator)
+ indicator.contentPadding.right
+ else
+ indicator && mirrored ? indicator.width + spacing : 0
+ }
+ }
+}
diff --git a/src/quickcontrols/windows/ComboBox.qml b/src/quickcontrols/windows/ComboBox.qml
new file mode 100644
index 0000000000..7226fa11f8
--- /dev/null
+++ b/src/quickcontrols/windows/ComboBox.qml
@@ -0,0 +1,94 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Window
+import QtQuick.Controls
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+import QtQuick.NativeStyle as NativeStyle
+
+T.ComboBox {
+ id: control
+
+ readonly property bool __nativeBackground: background instanceof NativeStyle.StyleItem
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding,
+ 90 /* minimum */ )
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding,
+ implicitIndicatorHeight + topPadding + bottomPadding)
+
+ leftPadding: __nativeBackground ? background.contentPadding.left : 5
+ rightPadding: __nativeBackground ? background.contentPadding.right : 5
+ topPadding: __nativeBackground ? background.contentPadding.top : 5
+ bottomPadding: __nativeBackground ? background.contentPadding.bottom : 5
+
+ contentItem: T.TextField {
+ implicitWidth: contentWidth
+ implicitHeight: contentHeight
+ text: control.editable ? control.editText : control.displayText
+
+ enabled: control.editable
+ autoScroll: control.editable
+ readOnly: control.down
+ inputMethodHints: control.inputMethodHints
+ validator: control.validator
+ selectByMouse: control.selectTextByMouse
+
+ color: control.editable ? control.palette.text : control.palette.buttonText
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ background: NativeStyle.ComboBox {
+ control: control
+ contentWidth: contentItem.implicitWidth
+ contentHeight: contentItem.implicitHeight
+ useNinePatchImage: false
+ }
+
+ delegate: ItemDelegate {
+ width: ListView.view.width
+ text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData
+ palette.text: control.palette.text
+ palette.highlightedText: control.palette.highlightedText
+ font.weight: control.currentIndex === index ? Font.DemiBold : Font.Normal
+ highlighted: control.highlightedIndex === index
+ hoverEnabled: control.hoverEnabled
+ }
+
+ popup: T.Popup {
+ readonly property var layoutMargins: control.__nativeBackground ? control.background.layoutMargins : null
+ x: layoutMargins ? layoutMargins.left : 0
+ y: control.height - (layoutMargins ? layoutMargins.bottom : 0)
+ width: control.width - (layoutMargins ? layoutMargins.left + layoutMargins.right : 0)
+ height: Math.min(contentItem.implicitHeight, control.Window.height - topMargin - bottomMargin)
+ topMargin: 6
+ bottomMargin: 6
+
+ contentItem: ListView {
+ clip: true
+ implicitHeight: contentHeight
+ model: control.delegateModel
+ currentIndex: control.highlightedIndex
+ highlightMoveDuration: 0
+
+ Rectangle {
+ z: 10
+ width: parent.width
+ height: parent.height
+ color: "transparent"
+ border.color: control.palette.mid
+ }
+
+ T.ScrollIndicator.vertical: ScrollIndicator { }
+ }
+
+ background: Rectangle {
+ color: control.palette.window
+ }
+ }
+}
diff --git a/src/quickcontrols/windows/Frame.qml b/src/quickcontrols/windows/Frame.qml
new file mode 100644
index 0000000000..bb37d8aa26
--- /dev/null
+++ b/src/quickcontrols/windows/Frame.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultFrame {
+}
diff --git a/src/quickcontrols/windows/GroupBox.qml b/src/quickcontrols/windows/GroupBox.qml
new file mode 100644
index 0000000000..0002feb676
--- /dev/null
+++ b/src/quickcontrols/windows/GroupBox.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultGroupBox {
+}
diff --git a/src/quickcontrols/windows/ProgressBar.qml b/src/quickcontrols/windows/ProgressBar.qml
new file mode 100644
index 0000000000..421070cf7f
--- /dev/null
+++ b/src/quickcontrols/windows/ProgressBar.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultProgressBar {
+}
diff --git a/src/quickcontrols/windows/RadioButton.qml b/src/quickcontrols/windows/RadioButton.qml
new file mode 100644
index 0000000000..b32a8a7a6b
--- /dev/null
+++ b/src/quickcontrols/windows/RadioButton.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultRadioButton {
+}
diff --git a/src/quickcontrols/windows/ScrollBar.qml b/src/quickcontrols/windows/ScrollBar.qml
new file mode 100644
index 0000000000..6906f7dfa2
--- /dev/null
+++ b/src/quickcontrols/windows/ScrollBar.qml
@@ -0,0 +1,95 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultScrollBar {
+ id: controlRoot
+
+ topPadding: orientation === Qt.Vertical ? controlRoot.__decreaseVisual.indicator.height : 0
+ bottomPadding: orientation === Qt.Vertical ? controlRoot.__increaseVisual.indicator.height : 0
+ leftPadding: orientation === Qt.Horizontal ? controlRoot.__decreaseVisual.indicator.width : 0
+ rightPadding: orientation === Qt.Horizontal ? controlRoot.__increaseVisual.indicator.width : 0
+
+ contentItem: NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.Handle
+ }
+
+ NativeStyle.ScrollBar {
+ // Fade a hovered-looking version of the handle
+ // on top of the default handle when hovering it
+ x: contentItem.x
+ y: contentItem.y
+ z: 1
+ width: contentItem.width
+ height: contentItem.height
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.Handle
+ overrideState: NativeStyle.StyleItem.AlwaysHovered
+ opacity: controlRoot.hovered || control.pressed ? 1 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } }
+ }
+
+ // The groove background should have window color
+ Rectangle {
+ x: background.x
+ y: background.y
+ z: -1
+ width: background.width
+ height: background.height
+ color: controlRoot.palette.window
+ }
+
+ background: NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.Groove
+ overrideState: NativeStyle.ScrollBar.NeverHovered
+ }
+
+ __decreaseVisual.indicator: NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.SubLine
+ overrideState: NativeStyle.ScrollBar.AlwaysHovered
+ opacity: controlRoot.__decreaseVisual.hovered ? 1 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } }
+ useNinePatchImage: false
+ }
+
+ NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.SubLine
+ overrideState: NativeStyle.ScrollBar.AlwaysSunken
+ opacity: controlRoot.__decreaseVisual.pressed ? 1 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ useNinePatchImage: false
+ z: 1
+ }
+
+ __increaseVisual.indicator: NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.AddLine
+ x: orientation === Qt.Horizontal ? controlRoot.width - width : 0
+ y: orientation === Qt.Vertical ? controlRoot.height - height : 0
+ overrideState: NativeStyle.ScrollBar.AlwaysHovered
+ opacity: controlRoot.__increaseVisual.hovered ? 1 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ Behavior on opacity { NumberAnimation { duration: contentItem.transitionDuration } }
+ useNinePatchImage: false
+ }
+
+ NativeStyle.ScrollBar {
+ control: controlRoot
+ subControl: NativeStyle.ScrollBar.AddLine
+ x: __increaseVisual.indicator.x
+ y: __increaseVisual.indicator.y
+ z: 1
+ overrideState: NativeStyle.ScrollBar.AlwaysSunken
+ opacity: controlRoot.__increaseVisual.pressed ? 1 : 0
+ visible: contentItem instanceof NativeStyle.StyleItem
+ useNinePatchImage: false
+ }
+}
diff --git a/src/quickcontrols/windows/ScrollView.qml b/src/quickcontrols/windows/ScrollView.qml
new file mode 100644
index 0000000000..62619b8649
--- /dev/null
+++ b/src/quickcontrols/windows/ScrollView.qml
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Controls.impl
+import QtQuick.Templates as T
+
+T.ScrollView {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ contentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ contentHeight + topPadding + bottomPadding)
+
+ rightPadding: ScrollBar.vertical.visible ? ScrollBar.vertical.width : 0
+ bottomPadding: ScrollBar.horizontal.visible ? ScrollBar.horizontal.height : 0
+
+ ScrollBar.vertical: ScrollBar {
+ parent: control
+ x: control.mirrored ? 0 : control.width - width
+ y: 0
+ height: control.height - (control.ScrollBar.horizontal.visible ? control.ScrollBar.horizontal.height : 0)
+ active: control.ScrollBar.horizontal.active
+ }
+
+ ScrollBar.horizontal: ScrollBar {
+ parent: control
+ x: 0
+ y: control.height - height
+ width: control.width - (control.ScrollBar.vertical.visible ? control.ScrollBar.vertical.width : 0)
+ active: control.ScrollBar.vertical.active
+ }
+}
diff --git a/src/quickcontrols/windows/SelectionRectangle.qml b/src/quickcontrols/windows/SelectionRectangle.qml
new file mode 100644
index 0000000000..8efadd8e31
--- /dev/null
+++ b/src/quickcontrols/windows/SelectionRectangle.qml
@@ -0,0 +1,29 @@
+// Copyright (C) 2021 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.Shapes
+
+T.SelectionRectangle {
+ id: control
+
+ topLeftHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+
+ bottomRightHandle: Item {
+ width: 20
+ height: 20
+ visible: SelectionRectangle.control.active
+ // This item is deliberately empty. Selection handles don't feel at home
+ // for this style. But we provide an invisible handle that the user can
+ // drag on.
+ }
+
+}
diff --git a/src/quickcontrols/windows/Slider.qml b/src/quickcontrols/windows/Slider.qml
new file mode 100644
index 0000000000..67c8e9638a
--- /dev/null
+++ b/src/quickcontrols/windows/Slider.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultSlider {
+}
diff --git a/src/quickcontrols/windows/SpinBox.qml b/src/quickcontrols/windows/SpinBox.qml
new file mode 100644
index 0000000000..0d54e1a4c5
--- /dev/null
+++ b/src/quickcontrols/windows/SpinBox.qml
@@ -0,0 +1,88 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.Templates as T
+import QtQuick.NativeStyle as NativeStyle
+
+T.SpinBox {
+ id: control
+
+ property bool nativeIndicators: up.indicator.hasOwnProperty("_qt_default")
+ && down.indicator.hasOwnProperty("_qt_default")
+
+ implicitWidth: Math.max(contentItem.implicitWidth + leftInset + rightInset,
+ 90 /* minimum */ )
+ implicitHeight: Math.max(contentItem.implicitHeight, up.implicitIndicatorHeight + down.implicitIndicatorHeight)
+ + topInset + bottomInset
+
+ spacing: 2
+
+ leftPadding: 0
+ topPadding: 0
+ rightPadding: rightInset
+ bottomPadding: 0
+
+ validator: IntValidator {
+ locale: control.locale.name
+ bottom: Math.min(control.from, control.to)
+ top: Math.max(control.from, control.to)
+ }
+
+ contentItem: TextField {
+ text: control.displayText
+ font: control.font
+ color: control.palette.text
+ selectionColor: control.palette.highlight
+ selectedTextColor: control.palette.highlightedText
+ horizontalAlignment: Qt.AlignLeft
+ verticalAlignment: Qt.AlignVCenter
+
+ topPadding: 0
+ bottomPadding: 0
+ leftPadding: 10
+ rightPadding: 10
+
+ readOnly: !control.editable
+ validator: control.validator
+ inputMethodHints: control.inputMethodHints
+
+ // Since the indicators are embedded inside the TextField we need to avoid that
+ // the TextField consumes mouse events for that area.
+ // We achieve that by setting a containmentMask
+ containmentMask: Item { height: contentItem.height; width: contentItem.width - upAndDown.width }
+ }
+
+ NativeStyle.SpinBox {
+ id: upAndDown
+ control: control
+ subControl: NativeStyle.SpinBox.Up
+ visible: nativeIndicators
+ x: up.indicator.x
+ y: up.indicator.y
+ //implicitHeight: contentItem.implicitHeight-2
+ height: parent.height-2
+ useNinePatchImage: false
+ z:99
+ }
+
+ up.indicator: Item {
+ x: parent.width - width - 2
+ y: 1
+ height: upAndDown.height >> 1
+ implicitWidth: upAndDown.implicitWidth
+ implicitHeight: (upAndDown.implicitHeight >> 1)
+ property bool _qt_default
+ }
+
+ down.indicator: Item {
+ x: parent.width - width - 2
+ y: up.indicator.y + (upAndDown.height >> 1)
+ height: upAndDown.height - up.indicator.height
+ implicitWidth: upAndDown.implicitWidth
+ implicitHeight: upAndDown.implicitHeight >> 1
+ property bool _qt_default
+ }
+
+ background: Item {} // No background, the TextField will cover the whole control
+}
diff --git a/src/quickcontrols/windows/TextArea.qml b/src/quickcontrols/windows/TextArea.qml
new file mode 100644
index 0000000000..9dbd0863bd
--- /dev/null
+++ b/src/quickcontrols/windows/TextArea.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultTextArea {
+}
diff --git a/src/quickcontrols/windows/TextField.qml b/src/quickcontrols/windows/TextField.qml
new file mode 100644
index 0000000000..1cedb17389
--- /dev/null
+++ b/src/quickcontrols/windows/TextField.qml
@@ -0,0 +1,8 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+import QtQuick
+import QtQuick.NativeStyle as NativeStyle
+
+NativeStyle.DefaultTextField {
+}
diff --git a/src/quickcontrols/windows/qtquickcontrols2windowsstyleplugin.cpp b/src/quickcontrols/windows/qtquickcontrols2windowsstyleplugin.cpp
new file mode 100644
index 0000000000..a3431af921
--- /dev/null
+++ b/src/quickcontrols/windows/qtquickcontrols2windowsstyleplugin.cpp
@@ -0,0 +1,42 @@
+// Copyright (C) 2020 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
+
+#include <QtQml/qqml.h>
+#include <QtQuickControls2/private/qquickstyleplugin_p.h>
+#include <QtQuickControls2/qquickstyle.h>
+
+QT_BEGIN_NAMESPACE
+
+extern void qml_register_types_QtQuick_Controls_Windows();
+Q_GHS_KEEP_REFERENCE(qml_register_types_QtQuick_Controls_Windows);
+
+class QtQuickControls2WindowsStylePlugin : public QQuickStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
+
+public:
+ QtQuickControls2WindowsStylePlugin(QObject *parent = nullptr);
+ QString name() const override;
+ void initializeTheme(QQuickTheme *theme) override;
+};
+
+QtQuickControls2WindowsStylePlugin::QtQuickControls2WindowsStylePlugin(QObject *parent):
+ QQuickStylePlugin(parent)
+{
+ volatile auto registration = &qml_register_types_QtQuick_Controls_Windows;
+ Q_UNUSED(registration);
+}
+
+QString QtQuickControls2WindowsStylePlugin::name() const
+{
+ return QStringLiteral("Windows");
+}
+
+void QtQuickControls2WindowsStylePlugin::initializeTheme(QQuickTheme * /*theme*/)
+{
+}
+
+QT_END_NAMESPACE
+
+#include "qtquickcontrols2windowsstyleplugin.moc"