aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols/ios
diff options
context:
space:
mode:
Diffstat (limited to 'src/quickcontrols/ios')
-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
249 files changed, 2516 insertions, 0 deletions
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"